diff --git a/.travis.yml b/.travis.yml index 4d90af025..0563e8378 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,13 +1,6 @@ language: java jdk: - oraclejdk8 - -addons: - mariadb: '10.0' - -services: - - mysql - - postgresql env: # encrypted Codacy key, see https://docs.travis-ci.com/user/encryption-keys/ @@ -15,11 +8,6 @@ env: before_install: - wget -O ~/codacy-coverage-reporter-assembly-latest.jar https://github.com/codacy/codacy-coverage-reporter/releases/download/2.0.0/codacy-coverage-reporter-2.0.0-assembly.jar - # create test database for mysql, mariadb and postgresql - - mysql -u root -e 'CREATE DATABASE test_db;' - - mysql -u root test_db < extensions/database/test/conf/travis-mysql.sql - - psql -c 'CREATE DATABASE test_db;' -U postgres - - psql -U postgres test_db < extensions/database/test/conf/travis-pgsql.sql script: - ./refine server_test diff --git a/extensions/build.xml b/extensions/build.xml index ed44ecab7..c2378e31e 100644 --- a/extensions/build.xml +++ b/extensions/build.xml @@ -13,7 +13,6 @@ - @@ -22,12 +21,10 @@ - - diff --git a/extensions/database/.classpath b/extensions/database/.classpath deleted file mode 100644 index e0f342dff..000000000 --- a/extensions/database/.classpath +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/extensions/database/.eclipse-pmd b/extensions/database/.eclipse-pmd deleted file mode 100644 index 4a705f215..000000000 --- a/extensions/database/.eclipse-pmd +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/extensions/database/.eslintrc.json b/extensions/database/.eslintrc.json deleted file mode 100644 index d15f78754..000000000 --- a/extensions/database/.eslintrc.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "env": { - "browser": true, - "es6": true - }, - "extends": "eslint:recommended", - "parserOptions": { - "sourceType": "module" - }, - "rules": { - "indent": [ - "error", - 4 - ], - "linebreak-style": [ - "error", - "unix" - ], - "quotes": [ - "error", - "double" - ], - "semi": [ - "error", - "always" - ] - } -} \ No newline at end of file diff --git a/extensions/database/.project b/extensions/database/.project deleted file mode 100644 index 350d6ee87..000000000 --- a/extensions/database/.project +++ /dev/null @@ -1,35 +0,0 @@ - - - refine-database-extension - - - - - - org.eclipse.wst.jsdt.core.javascriptValidator - - - - - org.eclipse.wst.common.project.facet.core.builder - - - - - org.eclipse.jdt.core.javabuilder - - - - - ch.acanda.eclipse.pmd.builder.PMDBuilder - - - - - - org.eclipse.jdt.core.javanature - org.eclipse.wst.common.project.facet.core.nature - org.eclipse.wst.jsdt.core.jsNature - ch.acanda.eclipse.pmd.builder.PMDNature - - diff --git a/extensions/database/.settings/.jsdtscope b/extensions/database/.settings/.jsdtscope deleted file mode 100644 index b13d30357..000000000 --- a/extensions/database/.settings/.jsdtscope +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/extensions/database/.settings/org.eclipse.jdt.core.prefs b/extensions/database/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index d6721a52c..000000000 --- a/extensions/database/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,280 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -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/extensions/database/.settings/org.eclipse.jdt.ui.prefs b/extensions/database/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index e3ddcd8c4..000000000 --- a/extensions/database/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,4 +0,0 @@ -#Mon Sep 27 15:02:46 PDT 2010 -eclipse.preferences.version=1 -formatter_profile=_Google Refine -formatter_settings_version=11 diff --git a/extensions/database/.settings/org.eclipse.wst.common.project.facet.core.xml b/extensions/database/.settings/org.eclipse.wst.common.project.facet.core.xml deleted file mode 100644 index 8ca4d66e9..000000000 --- a/extensions/database/.settings/org.eclipse.wst.common.project.facet.core.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/extensions/database/.settings/org.eclipse.wst.jsdt.ui.superType.container b/extensions/database/.settings/org.eclipse.wst.jsdt.ui.superType.container deleted file mode 100644 index 3bd5d0a48..000000000 --- a/extensions/database/.settings/org.eclipse.wst.jsdt.ui.superType.container +++ /dev/null @@ -1 +0,0 @@ -org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/extensions/database/.settings/org.eclipse.wst.jsdt.ui.superType.name b/extensions/database/.settings/org.eclipse.wst.jsdt.ui.superType.name deleted file mode 100644 index 05bd71b6e..000000000 --- a/extensions/database/.settings/org.eclipse.wst.jsdt.ui.superType.name +++ /dev/null @@ -1 +0,0 @@ -Window \ No newline at end of file diff --git a/extensions/database/README.md b/extensions/database/README.md deleted file mode 100644 index 28231b7df..000000000 --- a/extensions/database/README.md +++ /dev/null @@ -1,41 +0,0 @@ -This project is an extension for OpenRefine that provides a way to import database data using JDBC. - - -INSTALL - -1. Before installing this extension download OpenRefine code from http://code.google.com/p/google-refine/source/checkout. - -2. Pull this extension's code into folder database under folder /extensions. -For more information on how to write a OpenRefine extensions and where to put the files see http://code.google.com/p/google-refine/wiki/WriteAnExtension - -The folder structure should resemble this: -grefine-all/ -----------/extensions ---------------/database -------------------/module -------------------/src -------------------build.xml -------------------README (this file) - -3. Update build.xml in folder /extensions with build and clean ant tasks for database: - - - - - - - - - - - - - - - - - - - - -4. If using Eclipse, make sure that you build project with ant diff --git a/extensions/database/build.xml b/extensions/database/build.xml deleted file mode 100644 index c2c8f6c89..000000000 --- a/extensions/database/build.xml +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/extensions/database/licenses/jdbc-client.LICENSE.txt b/extensions/database/licenses/jdbc-client.LICENSE.txt deleted file mode 100644 index a14b06b91..000000000 --- a/extensions/database/licenses/jdbc-client.LICENSE.txt +++ /dev/null @@ -1,188 +0,0 @@ -Copyright 2006 Google - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. \ No newline at end of file diff --git a/extensions/database/module/MOD-INF/.gitignore b/extensions/database/module/MOD-INF/.gitignore deleted file mode 100644 index 840e7d312..000000000 --- a/extensions/database/module/MOD-INF/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/classes/ diff --git a/extensions/database/module/MOD-INF/controller.js b/extensions/database/module/MOD-INF/controller.js deleted file mode 100644 index 5df821fbf..000000000 --- a/extensions/database/module/MOD-INF/controller.js +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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. - */ - -/* - * Controller for JDBC Database extension. - * - * This is run in the Butterfly (ie Refine) server context using the Rhino - * Javascript interpreter. - */ - -var html = "text/html"; -var encoding = "UTF-8"; -var version = "0.1"; -var ClientSideResourceManager = Packages.com.google.refine.ClientSideResourceManager; - -var logger = Packages.org.slf4j.LoggerFactory.getLogger("database-extension"), -File = Packages.java.io.File, -refineServlet = Packages.com.google.refine.RefineServlet; - -/* - * Register our custom commands. - */ -function registerCommands() { - - logger.info("Registering Database Extension Commands......"); - var RS = Packages.com.google.refine.RefineServlet; - RS.registerCommand(module, "test-connect", Packages.com.google.refine.extension.database.cmd.TestConnectCommand()); - RS.registerCommand(module, "connect", Packages.com.google.refine.extension.database.cmd.ConnectCommand()); - RS.registerCommand(module, "saved-connection", Packages.com.google.refine.extension.database.cmd.SavedConnectionCommand()); - RS.registerCommand(module, "execute-query", Packages.com.google.refine.extension.database.cmd.ExecuteQueryCommand()); - RS.registerCommand(module, "test-query", Packages.com.google.refine.extension.database.cmd.TestQueryCommand()); - logger.info("Database Extension Command Registeration done!!"); -} - -function registerOperations() { - logger.info("Database Operations Registered successfully..."); -} - -function registerFunctions() { - logger.info("Database Functions Registered successfully..."); -} - - -/* - * Function invoked to initialize the extension. - */ -function init() { - - logger.info("Initializing OpenRefine Database..."); - logger.info("Database Extension Mount point " + module.getMountPoint()); - - registerCommands(); - registerOperations(); - registerFunctions(); - - - // Register importer and exporter - var IM = Packages.com.google.refine.importing.ImportingManager; - - IM.registerController( - module, - "database-import-controller", - new Packages.com.google.refine.extension.database.DatabaseImportController() - ); - - - // Script files to inject into /index page - ClientSideResourceManager.addPaths( - "index/scripts", - module, - [ - "scripts/index/jquery.contextMenu.min.js", - "scripts/index/jquery.ui.position.min.js", - "scripts/database-extension.js", - "scripts/index/database-import-controller.js", - "scripts/index/database-source-ui.js" - ] - ); - // Style files to inject into /index page - ClientSideResourceManager.addPaths( - "index/styles", - module, - [ - "styles/jquery.contextMenu.css", - "styles/pure.css", - "styles/bootstrap.css", - "styles/database-import.less" - - ] - ); - - // Script files to inject into /project page - ClientSideResourceManager.addPaths( - "project/scripts", - module, - [ - "scripts/database-extension.js", - "scripts/project/database-exporters.js" - ] - ); -} - -/* - * Function invoked to handle each request in a custom way. - */ -function process(path, request, response) { - - - var method = request.getMethod(); - - logger.info('receiving request for ' + path); - logger.info('receiving method for ' + method); - - if (path == "/" || path == "") { - var context = {}; - context.version = version; - send(request, response, "index.vt", context); - } -} - -function send(request, response, template, context) { - butterfly.sendTextFromTemplate(request, response, context, template, encoding, html); -} diff --git a/extensions/database/module/MOD-INF/dbextension.properties b/extensions/database/module/MOD-INF/dbextension.properties deleted file mode 100644 index db482f687..000000000 --- a/extensions/database/module/MOD-INF/dbextension.properties +++ /dev/null @@ -1,3 +0,0 @@ -# Batch size for import data -preview.batchSize = 100 -create.batchSize = 1000 diff --git a/extensions/database/module/MOD-INF/lib/commons-collections-3.2.1.jar b/extensions/database/module/MOD-INF/lib/commons-collections-3.2.1.jar deleted file mode 100644 index c35fa1fee..000000000 Binary files a/extensions/database/module/MOD-INF/lib/commons-collections-3.2.1.jar and /dev/null differ diff --git a/extensions/database/module/MOD-INF/lib/commons-io-1.4.jar b/extensions/database/module/MOD-INF/lib/commons-io-1.4.jar deleted file mode 100644 index 133dc6cb3..000000000 Binary files a/extensions/database/module/MOD-INF/lib/commons-io-1.4.jar and /dev/null differ diff --git a/extensions/database/module/MOD-INF/lib/google-http-client-1.20.0.jar b/extensions/database/module/MOD-INF/lib/google-http-client-1.20.0.jar deleted file mode 100644 index 82887fb3e..000000000 Binary files a/extensions/database/module/MOD-INF/lib/google-http-client-1.20.0.jar and /dev/null differ diff --git a/extensions/database/module/MOD-INF/lib/google-http-client-jackson2-1.20.0.jar b/extensions/database/module/MOD-INF/lib/google-http-client-jackson2-1.20.0.jar deleted file mode 100644 index 674aea920..000000000 Binary files a/extensions/database/module/MOD-INF/lib/google-http-client-jackson2-1.20.0.jar and /dev/null differ diff --git a/extensions/database/module/MOD-INF/lib/httpclient-4.0.1.jar b/extensions/database/module/MOD-INF/lib/httpclient-4.0.1.jar deleted file mode 100644 index ad32285ab..000000000 Binary files a/extensions/database/module/MOD-INF/lib/httpclient-4.0.1.jar and /dev/null differ diff --git a/extensions/database/module/MOD-INF/lib/httpcore-4.0.1.jar b/extensions/database/module/MOD-INF/lib/httpcore-4.0.1.jar deleted file mode 100644 index 4aef35e2f..000000000 Binary files a/extensions/database/module/MOD-INF/lib/httpcore-4.0.1.jar and /dev/null differ diff --git a/extensions/database/module/MOD-INF/lib/jackson-core-asl-1.9.13.jar b/extensions/database/module/MOD-INF/lib/jackson-core-asl-1.9.13.jar deleted file mode 100644 index bb4fe1da1..000000000 Binary files a/extensions/database/module/MOD-INF/lib/jackson-core-asl-1.9.13.jar and /dev/null differ diff --git a/extensions/database/module/MOD-INF/lib/jackson-mapper-asl-1.9.13.jar b/extensions/database/module/MOD-INF/lib/jackson-mapper-asl-1.9.13.jar deleted file mode 100644 index 0f2073fc7..000000000 Binary files a/extensions/database/module/MOD-INF/lib/jackson-mapper-asl-1.9.13.jar and /dev/null differ diff --git a/extensions/database/module/MOD-INF/lib/jasypt-1.9.2.jar b/extensions/database/module/MOD-INF/lib/jasypt-1.9.2.jar deleted file mode 100644 index c22a7e6d5..000000000 Binary files a/extensions/database/module/MOD-INF/lib/jasypt-1.9.2.jar and /dev/null differ diff --git a/extensions/database/module/MOD-INF/lib/json-simple-1.1.1.jar b/extensions/database/module/MOD-INF/lib/json-simple-1.1.1.jar deleted file mode 100644 index dfd5856d0..000000000 Binary files a/extensions/database/module/MOD-INF/lib/json-simple-1.1.1.jar and /dev/null differ diff --git a/extensions/database/module/MOD-INF/lib/mariadb-java-client-2.2.0.jar b/extensions/database/module/MOD-INF/lib/mariadb-java-client-2.2.0.jar deleted file mode 100644 index 7575fec64..000000000 Binary files a/extensions/database/module/MOD-INF/lib/mariadb-java-client-2.2.0.jar and /dev/null differ diff --git a/extensions/database/module/MOD-INF/lib/mysql-connector-java-5.1.44-bin.jar b/extensions/database/module/MOD-INF/lib/mysql-connector-java-5.1.44-bin.jar deleted file mode 100644 index 2f2e32d51..000000000 Binary files a/extensions/database/module/MOD-INF/lib/mysql-connector-java-5.1.44-bin.jar and /dev/null differ diff --git a/extensions/database/module/MOD-INF/lib/postgresql-42.1.4.jar b/extensions/database/module/MOD-INF/lib/postgresql-42.1.4.jar deleted file mode 100644 index 08a54b105..000000000 Binary files a/extensions/database/module/MOD-INF/lib/postgresql-42.1.4.jar and /dev/null differ diff --git a/extensions/database/module/MOD-INF/module.properties b/extensions/database/module/MOD-INF/module.properties deleted file mode 100644 index 2b0cef961..000000000 --- a/extensions/database/module/MOD-INF/module.properties +++ /dev/null @@ -1,7 +0,0 @@ -name = database -description = Database importer/exporter for OpenRefine -templating.macros = macros.vm -requires = core - -# Use our custom class for a module implementation. -module-impl = com.google.refine.extension.database.DatabaseModuleImpl diff --git a/extensions/database/module/images/fonts/glyphicons-halflings-regular.eot b/extensions/database/module/images/fonts/glyphicons-halflings-regular.eot deleted file mode 100644 index b93a4953f..000000000 Binary files a/extensions/database/module/images/fonts/glyphicons-halflings-regular.eot and /dev/null differ diff --git a/extensions/database/module/images/fonts/glyphicons-halflings-regular.svg b/extensions/database/module/images/fonts/glyphicons-halflings-regular.svg deleted file mode 100644 index 94fb5490a..000000000 --- a/extensions/database/module/images/fonts/glyphicons-halflings-regular.svg +++ /dev/null @@ -1,288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/extensions/database/module/images/fonts/glyphicons-halflings-regular.ttf b/extensions/database/module/images/fonts/glyphicons-halflings-regular.ttf deleted file mode 100644 index 1413fc609..000000000 Binary files a/extensions/database/module/images/fonts/glyphicons-halflings-regular.ttf and /dev/null differ diff --git a/extensions/database/module/images/fonts/glyphicons-halflings-regular.woff b/extensions/database/module/images/fonts/glyphicons-halflings-regular.woff deleted file mode 100644 index 9e612858f..000000000 Binary files a/extensions/database/module/images/fonts/glyphicons-halflings-regular.woff and /dev/null differ diff --git a/extensions/database/module/images/fonts/glyphicons-halflings-regular.woff2 b/extensions/database/module/images/fonts/glyphicons-halflings-regular.woff2 deleted file mode 100644 index 64539b54c..000000000 Binary files a/extensions/database/module/images/fonts/glyphicons-halflings-regular.woff2 and /dev/null differ diff --git a/extensions/database/module/images/more-option-horiz-16.png b/extensions/database/module/images/more-option-horiz-16.png deleted file mode 100644 index 0620d0a57..000000000 Binary files a/extensions/database/module/images/more-option-horiz-16.png and /dev/null differ diff --git a/extensions/database/module/images/more_option-vert-16.png b/extensions/database/module/images/more_option-vert-16.png deleted file mode 100644 index fa41b4f3b..000000000 Binary files a/extensions/database/module/images/more_option-vert-16.png and /dev/null differ diff --git a/extensions/database/module/index.vt b/extensions/database/module/index.vt deleted file mode 100644 index 147cb507b..000000000 --- a/extensions/database/module/index.vt +++ /dev/null @@ -1,20 +0,0 @@ -#* - * Access this page at the URL /extension/database/ - *# - - - OpenRefine Database Extension v$version - - -

OpenRefine DATABASE Extension v$version

-

by Tony Opara

-

The JDBC extension allows OpenRefine to read - (and write, soon) data from JDBC compatible databases(MySQL, PostgreSQL, MariaDB). -

-

Known Limitations

-
    -
  • No write support
  • - -
- - \ No newline at end of file diff --git a/extensions/database/module/langs/translation-en.json b/extensions/database/module/langs/translation-en.json deleted file mode 100644 index c29b6930d..000000000 --- a/extensions/database/module/langs/translation-en.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "database-import": { - "title": "Database Servers", - "preparing": "Preparing Result ...", - "checking": "Validating Query ...", - "creating": "Creating project ..." - }, - "database-source": { - "alert-host": "You must specify a Database Host", - "alert-port": "You must specify a Database Port", - "alert-user": "You must specify a Database User", - "alert-password": "You must specify a Database Password", - "alert-connection-name": "You must specify a Connection Name", - "alert-initial-database": "You must specify an Initial Database", - "alert-query": "You must specify a valid Query", - "alert-invalid-query-keyword": "Query cannot contain Data Manipulation keyword:", - "alert-invalid-query-select": "Query must start with SELECT Keyword", - "form-validation-failure" : "New Connection From is Invalid!", - "alert-connection-edit": "Connection edited successfully", - "connectionNameLabel": "Name:", - "databaseTypeLabel": "Type:", - "databaseHostLabel": "Host:", - "databasePortLabel": "Port:", - "databaseUserLabel": "User:", - "databasePasswordLabel": "Password:", - "databaseNameLabel": "Database:", - "databaseSchemaLabel": "Schema:", - "databaseTestButton": "Test", - "databaseSaveButton": "Save", - "databaseConnectButton": "Connect", - "newConnectionButtonDiv": "New Connection", - "savedConnectionSpan": "Saved Connections" - - - }, - "database-parsing": { - "start-over": "« Start Over", - "conf-pars": "Configure Parsing Options", - "proj-name": "Project name", - "create-proj": "Create Project »", - "updating-preview": "Updating preview ...", - "worksheet": "Worksheets", - "option": "Options", - "preview-button": "Update Preview", - "ignore-first": "Ignore first", - "ignore": "line(s) at beginning of file", - "parse-next": "Parse next", - "parse": "line(s) as column headers", - "discard-next": "Discard initial", - "discard": "row(s) of data", - "limit-next": "Load at most", - "limit": "row(s) of data", - "store-row": "Store blank rows", - "store-cell": "Store blank cells as nulls" - } - -} - \ No newline at end of file diff --git a/extensions/database/module/langs/translation-fr.json b/extensions/database/module/langs/translation-fr.json deleted file mode 100644 index deaa69b84..000000000 --- a/extensions/database/module/langs/translation-fr.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - -} diff --git a/extensions/database/module/langs/translation-he.json b/extensions/database/module/langs/translation-he.json deleted file mode 100644 index deaa69b84..000000000 --- a/extensions/database/module/langs/translation-he.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - -} diff --git a/extensions/database/module/langs/translation-it.json b/extensions/database/module/langs/translation-it.json deleted file mode 100644 index deaa69b84..000000000 --- a/extensions/database/module/langs/translation-it.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - -} diff --git a/extensions/database/module/macros.vm b/extensions/database/module/macros.vm deleted file mode 100644 index 18a83bfce..000000000 --- a/extensions/database/module/macros.vm +++ /dev/null @@ -1,14 +0,0 @@ -#* - This file contains common velocity macros used in all .vt files. - For Velocity documentation, see: - - http://velocity.apache.org/engine/releases/velocity-1.5/user-guide.html -*# - -#macro( makeAList $list ) -
    - #foreach($item in $list) -
  • $item
  • - #end -
-#end \ No newline at end of file diff --git a/extensions/database/module/scripts/database-extension.js b/extensions/database/module/scripts/database-extension.js deleted file mode 100644 index 56ce061fe..000000000 --- a/extensions/database/module/scripts/database-extension.js +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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. - */ - -$(function(){ - $.contextMenu({ - selector: '.context-menu-one', - trigger: 'left', - build: function($trigger, e) { - - return { - callback: function(key, options) { - var m = "clicked: " + key; - DatabaseExtension.handleSavedConnectionClicked(key, $(this).text()); - - }, - - items: { - "edit": {name: " Edit "}, - "sep0": "", - "delete": {name: " Delete "}, - "sep1": "---------", - "connect": {name: " Connect "}, - "dummy": {name: "", icon: ""} - } - }; - } - }); -}); - -var DatabaseExtension = {}; - -DatabaseExtension.currentConnection = {}; - -DatabaseExtension.handleSavedConnectionClicked = function(menuKey, connectionName) { - var jdbcConnectionInfo = {}; - jdbcConnectionInfo.connectionName = connectionName; - - if(menuKey === "edit"){ - DatabaseExtension.handleEditConnectionClicked(connectionName); - - }else if(menuKey === "delete"){ - DatabaseExtension.handleDeleteConnectionClicked(connectionName); - - }else if(menuKey === "connect"){ - DatabaseExtension.handleConnectClicked(connectionName); - } - -}; - - -DatabaseExtension.handleConnectClicked = function(connectionName) { - - $.get( - "command/database/saved-connection" + '?' + $.param({"connectionName": connectionName}), - null, - - function(savedDatabaseConfig) { - - if(savedDatabaseConfig){ - - var savedConfig = savedDatabaseConfig.savedConnections[0]; - var databaseConfig = {}; - databaseConfig.connectionName = savedConfig.connectionName; - databaseConfig.databaseType = savedConfig.databaseType; - databaseConfig.databaseServer = savedConfig.databaseHost; - databaseConfig.databasePort = savedConfig.databasePort; - databaseConfig.databaseUser = savedConfig.databaseUser; - databaseConfig.databasePassword = savedConfig.databasePassword; - databaseConfig.initialDatabase = savedConfig.databaseName; - databaseConfig.initialSchema = savedConfig.databaseSchema; - - $.post( - "command/database/connect", - databaseConfig, - - function(databaseInfo) { - - if(databaseInfo){ - DatabaseExtension.currentConnection.databaseInfo; - $( "#currentConnectionNameInput" ).val(databaseConfig.connectionName); - $( "#currentDatabaseTypeInput" ).val(databaseConfig.databaseType); - $( "#currentDatabaseUserInput" ).val(databaseConfig.databaseUser); - $( "#currentDatabasePasswordInput" ).val(databaseConfig.databasePassword); - $( "#currentDatabaseHostInput" ).val(databaseConfig.databaseServer); - $( "#currentDatabasePortInput" ).val(databaseConfig.databasePort); - $( "#currentInitialDatabaseInput" ).val(databaseConfig.initialDatabase); - - var connectionParam = "Connection[" + databaseConfig.connectionName + "] :: " - + "jdbc:" - + databaseConfig.databaseType + "://" - + databaseConfig.databaseServer + ":" - + databaseConfig.databasePort + "/" - + databaseConfig.initialDatabase; - - $( "#connectionParameterSpan" ).text(connectionParam); - $( "#newConnectionDiv" ).hide(); - $( "#sqlEditorDiv" ).show(); - - }else{ - window.alert("Unable to establish connection to database"); - } - - }, - "json" - ).fail(function( jqXhr, textStatus, errorThrown ){ - alert( textStatus + ':' + errorThrown ); - }); - - } - - }, - "json" - ); -}; - -DatabaseExtension.handleDeleteConnectionClicked = function(connectionName) { - $.ajax({ - url: 'command/database/saved-connection' + '?' + $.param({"connectionName": connectionName}), - type: 'DELETE', - contentType:'application/json', - data: null, - success: function(settings) { - if(settings){ - - $( "#menuListUl" ).empty(); - var items = []; - $.each(settings.savedConnections,function(index,savedConnection){ - items.push('
  • ' - + '' + savedConnection.connectionName + '' - + '
  • '); - }) - - $( "#menuListUl" ).append(items.join('')); - } - } - }).fail(function( jqXhr, textStatus, errorThrown ){ - alert( textStatus + ':' + errorThrown ); - }); -} - -DatabaseExtension.handleEditConnectionClicked = function(connectionName) { - - $.get( - "command/database/saved-connection" + '?' + $.param({"connectionName": connectionName}), - null, - function(savedDatabaseConfig) { - - if(savedDatabaseConfig){ - - var savedConfig = savedDatabaseConfig.savedConnections[0]; - $( "#connectionName" ).val(savedConfig.connectionName); - $( "#databaseTypeSelect" ).val(savedConfig.databaseType); - $( "#databaseHost" ).val(savedConfig.databaseHost); - $( "#databasePort" ).val(savedConfig.databasePort); - $( "#databaseUser" ).val(savedConfig.databaseUser); - $( "#databasePassword" ).val(savedConfig.databasePassword); - $( "#initialDatabase" ).val(savedConfig.databaseName); - $( "#initialSchema" ).val(savedConfig.databaseSchema); - $( "#newConnectionControlDiv" ).hide(); - $( "#editConnectionControlDiv" ).show(); - $( "#newConnectionDiv" ).show(); - $('#sqlEditorDiv').hide(); - $("#connectionName").attr('readonly', 'readonly'); - - } - - }, - "json" - ); - -} diff --git a/extensions/database/module/scripts/index/database-import-controller.js b/extensions/database/module/scripts/index/database-import-controller.js deleted file mode 100644 index e76dfe845..000000000 --- a/extensions/database/module/scripts/index/database-import-controller.js +++ /dev/null @@ -1,378 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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. - */ - -//Internationalization init -var lang = navigator.language.split("-")[0] - || navigator.userLanguage.split("-")[0]; -var dictionary = ""; -$.ajax({ - url : "command/core/load-language?", - type : "POST", - async : false, - data : { - module : "database", - }, - success : function(data) { - dictionary = data; - } -}); -$.i18n.setDictionary(dictionary); -// End internationalization - -Refine.DatabaseImportController = function(createProjectUI) { - this._createProjectUI = createProjectUI; - - this._parsingPanel = createProjectUI.addCustomPanel(); - - createProjectUI.addSourceSelectionUI({ - label: "Database", - id: "database-source", - ui: new Refine.DatabaseSourceUI(this) - }); - -}; -Refine.CreateProjectUI.controllers.push(Refine.DatabaseImportController); - -Refine.DatabaseImportController.prototype.startImportingDocument = function(queryInfo) { - var dismiss = DialogSystem.showBusy($.i18n._('database-import')["preparing"]); - //alert(queryInfo.query); - var self = this; - - $.post( - "command/core/create-importing-job", - null, - function(data) { - $.post( - "command/core/importing-controller?" + $.param({ - "controller": "database/database-import-controller", - "subCommand": "initialize-parser-ui" - }), - queryInfo, - - function(data2) { - dismiss(); - - if (data2.status == 'ok') { - self._queryInfo = queryInfo; - self._jobID = data.jobID; - self._options = data2.options; - - self._showParsingPanel(); - - } else { - alert(data2.message); - } - }, - "json" - ); - }, - "json" - ); -}; - -Refine.DatabaseImportController.prototype.getOptions = function() { - var options = { - - }; - - var parseIntDefault = function(s, def) { - try { - var n = parseInt(s); - if (!isNaN(n)) { - return n; - } - } catch (e) { - // Ignore - } - return def; - }; - - - if (this._parsingPanelElmts.skipCheckbox[0].checked) { - options.skipDataLines = parseIntDefault(this._parsingPanelElmts.skipInput[0].value, 0); - } else { - options.skipDataLines = 0; - } - if (this._parsingPanelElmts.limitCheckbox[0].checked) { - options.limit = parseIntDefault(this._parsingPanelElmts.limitInput[0].value, -1); - } else { - options.limit = -1; - } - options.storeBlankRows = this._parsingPanelElmts.storeBlankRowsCheckbox[0].checked; - options.storeBlankCellsAsNulls = this._parsingPanelElmts.storeBlankCellsAsNullsCheckbox[0].checked; - - return options; -}; - -Refine.DatabaseImportController.prototype._showParsingPanel = function() { - var self = this; - - this._parsingPanel.unbind().empty().html( - DOM.loadHTML("database",'scripts/index/database-parsing-panel.html')); - - this._parsingPanelElmts = DOM.bind(this._parsingPanel); - - this._parsingPanelElmts.startOverButton.html($.i18n._('database-parsing')["start-over"]); - this._parsingPanelElmts.database_conf_pars.html($.i18n._('database-parsing')["conf-pars"]); - this._parsingPanelElmts.database_proj_name.html($.i18n._('database-parsing')["proj-name"]); - this._parsingPanelElmts.createProjectButton.html($.i18n._('database-parsing')["create-proj"]); - this._parsingPanelElmts.database_options.html($.i18n._('database-parsing')["option"]); - this._parsingPanelElmts.previewButton.html($.i18n._('database-parsing')["preview-button"]); - this._parsingPanelElmts.database_updating.html($.i18n._('database-parsing')["updating-preview"]); - this._parsingPanelElmts.database_discard_next.html($.i18n._('database-parsing')["discard-next"]); - this._parsingPanelElmts.database_discard.html($.i18n._('database-parsing')["discard"]); - this._parsingPanelElmts.database_limit_next.html($.i18n._('database-parsing')["limit-next"]); - this._parsingPanelElmts.database_limit.html($.i18n._('database-parsing')["limit"]); - this._parsingPanelElmts.database_store_row.html($.i18n._('database-parsing')["store-row"]); - this._parsingPanelElmts.database_store_cell.html($.i18n._('database-parsing')["store-cell"]); - - if (this._parsingPanelResizer) { - $(window).unbind('resize', this._parsingPanelResizer); - } - - this._parsingPanelResizer = function() { - var elmts = self._parsingPanelElmts; - var width = self._parsingPanel.width(); - var height = self._parsingPanel.height(); - var headerHeight = elmts.wizardHeader.outerHeight(true); - var controlPanelHeight = 250; - - elmts.dataPanel - .css("left", "0px") - .css("top", headerHeight + "px") - .css("width", (width - DOM.getHPaddings(elmts.dataPanel)) + "px") - .css("height", (height - headerHeight - controlPanelHeight - DOM.getVPaddings(elmts.dataPanel)) + "px"); - elmts.progressPanel - .css("left", "0px") - .css("top", headerHeight + "px") - .css("width", (width - DOM.getHPaddings(elmts.progressPanel)) + "px") - .css("height", (height - headerHeight - controlPanelHeight - DOM.getVPaddings(elmts.progressPanel)) + "px"); - - elmts.controlPanel - .css("left", "0px") - .css("top", (height - controlPanelHeight) + "px") - .css("width", (width - DOM.getHPaddings(elmts.controlPanel)) + "px") - .css("height", (controlPanelHeight - DOM.getVPaddings(elmts.controlPanel)) + "px"); - }; - - $(window).resize(this._parsingPanelResizer); - this._parsingPanelResizer(); - - this._parsingPanelElmts.startOverButton.click(function() { - // explicitly cancel the import job - Refine.CreateProjectUI.cancelImportingJob(self._jobID); - - delete self._jobID; - delete self._options; - - self._createProjectUI.showSourceSelectionPanel(); - }); - - this._parsingPanelElmts.createProjectButton.click(function() { self._createProject(); }); - this._parsingPanelElmts.previewButton.click(function() { self._updatePreview(); }); - //alert("datetime::" + $.now()); - //this._parsingPanelElmts.projectNameInput[0].value = this._queryInfo.connectionName + "_" + this._queryInfo.databaseUser + "_" + $.now(); - this._parsingPanelElmts.projectNameInput[0].value = this._queryInfo.databaseServer + "_" + this._queryInfo.initialDatabase + "_" + $.now(); - - - if (this._options.limit > 0) { - this._parsingPanelElmts.limitCheckbox.prop("checked", true); - this._parsingPanelElmts.limitInput[0].value = this._options.limit.toString(); - } - if (this._options.skipDataLines > 0) { - this._parsingPanelElmts.skipCheckbox.prop("checked", true); - this._parsingPanelElmts.skipInput.value[0].value = this._options.skipDataLines.toString(); - } - if (this._options.storeBlankRows) { - this._parsingPanelElmts.storeBlankRowsCheckbox.prop("checked", true); - } - if (this._options.storeBlankCellsAsNulls) { - this._parsingPanelElmts.storeBlankCellsAsNullsCheckbox.prop("checked", true); - } - - var onChange = function() { - self._scheduleUpdatePreview(); - }; - this._parsingPanel.find("input").bind("change", onChange); - this._parsingPanel.find("select").bind("change", onChange); - - this._createProjectUI.showCustomPanel(this._parsingPanel); - this._updatePreview(); -}; - -Refine.DatabaseImportController.prototype._scheduleUpdatePreview = function() { - if (this._timerID != null) { - window.clearTimeout(this._timerID); - this._timerID = null; - } - - var self = this; - this._timerID = window.setTimeout(function() { - self._timerID = null; - self._updatePreview(); - }, 500); // 0.5 second - }; - -Refine.DatabaseImportController.prototype._updatePreview = function() { - var self = this; - // alert("query::" + this._queryInfo.query); - this._parsingPanelElmts.dataPanel.hide(); - this._parsingPanelElmts.progressPanel.show(); - this._queryInfo.options = JSON.stringify(this.getOptions()); - //alert("options:" + this._queryInfo.options); - - $.post( - "command/core/importing-controller?" + $.param({ - "controller": "database/database-import-controller", - "jobID": this._jobID, - "subCommand": "parse-preview" - }), - - this._queryInfo, - - function(result) { - if (result.status == "ok") { - self._getPreviewData(function(projectData) { - self._parsingPanelElmts.progressPanel.hide(); - self._parsingPanelElmts.dataPanel.show(); - - new Refine.PreviewTable(projectData, self._parsingPanelElmts.dataPanel.unbind().empty()); - }); - } else { - - alert('Errors:\n' + (result.message) ? result.message : Refine.CreateProjectUI.composeErrorMessage(job)); - self._parsingPanelElmts.progressPanel.hide(); - - Refine.CreateProjectUI.cancelImportingJob(self._jobID); - - delete self._jobID; - delete self._options; - - self._createProjectUI.showSourceSelectionPanel(); - - - } - }, - "json" - ); - }; - -Refine.DatabaseImportController.prototype._getPreviewData = function(callback, numRows) { - var self = this; - var result = {}; - - $.post( - "command/core/get-models?" + $.param({ "importingJobID" : this._jobID }), - null, - function(data) { - for (var n in data) { - if (data.hasOwnProperty(n)) { - result[n] = data[n]; - } - } - - $.post( - "command/core/get-rows?" + $.param({ - "importingJobID" : self._jobID, - "start" : 0, - "limit" : numRows || 100 // More than we parse for preview anyway - }), - null, - function(data) { - result.rowModel = data; - callback(result); - }, - "jsonp" - ); - }, - "json" - ); -}; - -Refine.DatabaseImportController.prototype._createProject = function() { - var projectName = $.trim(this._parsingPanelElmts.projectNameInput[0].value); - if (projectName.length == 0) { - window.alert("Please name the project."); - this._parsingPanelElmts.projectNameInput.focus(); - return; - } - - var self = this; - var options = this.getOptions(); - options.projectName = projectName; - - this._queryInfo.options = JSON.stringify(options); - $.post( - "command/core/importing-controller?" + $.param({ - "controller": "database/database-import-controller", - "jobID": this._jobID, - "subCommand": "create-project" - }), - this._queryInfo, - function(o) { - if (o.status == 'error') { - alert(o.message); - } else { - var start = new Date(); - var timerID = window.setInterval( - function() { - self._createProjectUI.pollImportJob( - start, - self._jobID, - timerID, - function(job) { - return "projectID" in job.config; - }, - function(jobID, job) { - //alert("jobID::" + jobID + " job :" + job); - window.clearInterval(timerID); - Refine.CreateProjectUI.cancelImportingJob(jobID); - document.location = "project?project=" + job.config.projectID; - }, - function(job) { - alert(Refine.CreateProjectUI.composeErrorMessage(job)); - } - ); - }, - 1000 - ); - self._createProjectUI.showImportProgressPanel($.i18n._('database-import')["creating"], function() { - // stop the timed polling - window.clearInterval(timerID); - - // explicitly cancel the import job - Refine.CreateProjectUI.cancelImportingJob(jobID); - - self._createProjectUI.showSourceSelectionPanel(); - }); - } - }, - "json" - ); -}; diff --git a/extensions/database/module/scripts/index/database-import-form.html b/extensions/database/module/scripts/index/database-import-form.html deleted file mode 100644 index de1f96f08..000000000 --- a/extensions/database/module/scripts/index/database-import-form.html +++ /dev/null @@ -1,144 +0,0 @@ -
    - -
    - -
    -
    -
    -
    -
    - -
    - Saved Connections - -
    - -
    -
    - -
    - -
    - - -
    -
    - - - New Connection Editor - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    - - -
    - - - -
    - - - -
    -
    - - - - - -
    - - - -
    - -
    - -
    - - -
    - \ No newline at end of file diff --git a/extensions/database/module/scripts/index/database-parsing-panel.html b/extensions/database/module/scripts/index/database-parsing-panel.html deleted file mode 100644 index 4ac5a1c75..000000000 --- a/extensions/database/module/scripts/index/database-parsing-panel.html +++ /dev/null @@ -1,53 +0,0 @@ -
    -
    - - - - - - - - -
    -
    -
    -
    -
    - - -
    -
    -
    - - - - - - - - -
    -
    - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    \ No newline at end of file diff --git a/extensions/database/module/scripts/index/database-source-ui.js b/extensions/database/module/scripts/index/database-source-ui.js deleted file mode 100644 index fdc86516e..000000000 --- a/extensions/database/module/scripts/index/database-source-ui.js +++ /dev/null @@ -1,479 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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. - */ - -Refine.DatabaseSourceUI = function(controller) { - this._controller = controller; -}; - -Refine.DatabaseSourceUI.prototype.attachUI = function(body) { - this._body = body; - - this._body.html(DOM.loadHTML("database", "scripts/index/database-import-form.html")); - this._elmts = DOM.bind(this._body); - var self = this; - - $('#database-title').text($.i18n._("database-import")["title"]); - $('#connectionNameLabel').html($.i18n._("database-source")["connectionNameLabel"]); - $('#databaseTypeLabel').html($.i18n._("database-source")["databaseTypeLabel"]); - $('#databaseHostLabel').text($.i18n._("database-source")["databaseHostLabel"]); - $('#databasePortLabel').text($.i18n._("database-source")["databasePortLabel"]); - $('#databaseUserLabel').text($.i18n._("database-source")["databaseUserLabel"]); - $('#databasePasswordLabel').text($.i18n._("database-source")["databasePasswordLabel"]); - $('#databaseNameLabel').text($.i18n._("database-source")["databaseNameLabel"]); - $('#databaseSchemaLabel').text($.i18n._("database-source")["databaseSchemaLabel"]); - $('#databaseTestButton').text($.i18n._("database-source")["databaseTestButton"]); - $('#databaseSaveButton').text($.i18n._("database-source")["databaseSaveButton"]); - $('#databaseConnectButton').text($.i18n._("database-source")["databaseConnectButton"]); - $('#newConnectionButtonDiv').text($.i18n._("database-source")["newConnectionButtonDiv"]); - $('#savedConnectionSpan').text($.i18n._("database-source")["savedConnectionSpan"]); - - - this._elmts.newConnectionButton.click(function(evt) { - self._resetDatabaseImportForm(); - $( "#newConnectionDiv" ).show(); - $( "#sqlEditorDiv" ).hide(); - // self._body.find('.newConnectionDiv').show(); - // self._body.find('.sqlEditorDiv').hide(); - - }); - - - this._elmts.databaseTypeSelect.change(function(event) { - var type = $( "#databaseTypeSelect" ).val(); - if(type === "postgresql"){ - $( "#databaseUser" ).val("postgres"); - $( "#databasePort" ).val("5432"); - }else if(type === "mysql"){ - $( "#databaseUser" ).val("root"); - $( "#databasePort" ).val("3306"); - }else if(type === "mariadb"){ - $( "#databaseUser" ).val("root"); - $( "#databasePort" ).val("3306"); - }else{ - $( "#databaseUser" ).val("root"); - $( "#databasePort" ).val("3306"); - } - }); - - this._elmts.testDatabaseButton.click(function(evt) { - - if(self._validateNewConnectionForm() === true){ - self._testDatabaseConnect(self._getConnectionInfo()); - } - - }); - - this._elmts.databaseConnectButton.click(function(evt) { - - if(self._validateNewConnectionForm() === true){ - self._connect(self._getConnectionInfo()); - } - - - }); - - this._elmts.saveConnectionButton.click(function(evt) { - - if(self._validateNewConnectionForm() == true){ - var connectionNameInput = $.trim(self._elmts.connectionNameInput[0].value); - if (connectionNameInput.length === 0) { - window.alert($.i18n._('database-source')["alert-connection-name"]); - } else{ - self._saveConnection(self._getConnectionInfo()); - } - - } - - }); - - this._elmts.executeQueryButton.click(function(evt) { - var jdbcQueryInfo = {}; - jdbcQueryInfo.connectionName = $( "#currentConnectionNameInput" ).val(); - jdbcQueryInfo.databaseType = $( "#currentDatabaseTypeInput" ).val(); - jdbcQueryInfo.databaseServer = $( "#currentDatabaseHostInput" ).val(); - jdbcQueryInfo.databasePort = $( "#currentDatabasePortInput" ).val(); - jdbcQueryInfo.databaseUser = $( "#currentDatabaseUserInput" ).val(); - jdbcQueryInfo.databasePassword = $( "#currentDatabasePasswordInput" ).val(); - jdbcQueryInfo.initialDatabase = $( "#currentInitialDatabaseInput" ).val(); - jdbcQueryInfo.query = $.trim($( "#queryTextArea" ).val()); - -// if(jdbcQueryInfo.query && jdbcQueryInfo.query.length > 0 ) { -// self._executeQuery(jdbcQueryInfo); -// }else{ -// window.alert($.i18n._('database-source')["alert-query"]); -// } - - if(self.validateQuery(jdbcQueryInfo.query)) { - self._executeQuery(jdbcQueryInfo); - } - - - - - }); - - - - this._elmts.editConnectionButton.click(function(evt) { - - if(self._validateNewConnectionForm() == true){ - var connectionNameInput = $.trim(self._elmts.connectionNameInput[0].value); - if (connectionNameInput.length === 0) { - window.alert($.i18n._('database-source')["alert-connection-name"]); - } else{ - self._editConnection(self._getConnectionInfo()); - } - - } - - }); - - this._elmts.cancelEditConnectionButton.click(function(evt) { - self._resetDatabaseImportForm(); - - }); - - //load saved connections from settings file in user home directory - self._loadSavedConnections(); - -};//end Refine.createUI - - -Refine.DatabaseSourceUI.prototype.focus = function() { -}; - - -Refine.DatabaseSourceUI.prototype.validateQuery = function(query) { - //alert("query::" + query); - if(!query || query.length <= 0 ) { - window.alert($.i18n._('database-source')["alert-query"]); - return false; - } - - var allCapsQuery = query.toUpperCase(); - - if(allCapsQuery.indexOf('DROP') > -1){ - window.alert($.i18n._('database-source')["alert-invalid-query-keyword"] + " DROP"); - return false; - }else if(allCapsQuery.indexOf('TRUNCATE') > -1){ - window.alert($.i18n._('database-source')["alert-invalid-query-keyword"] + " TRUNCATE"); - return false; - }else if(allCapsQuery.indexOf('DELETE') > -1){ - window.alert($.i18n._('database-source')["alert-invalid-query-keyword"] + " DELETE"); - return false; - }else if(allCapsQuery.indexOf('ROLLBACK') > -1){ - window.alert($.i18n._('database-source')["alert-invalid-query-keyword"] + " ROLLBACK"); - return false; - }else if(allCapsQuery.indexOf('SHUTDOWN') > -1){ - window.alert($.i18n._('database-source')["alert-invalid-query-keyword"] + " SHUTDOWN"); - return false; - }else if(allCapsQuery.indexOf('INSERT') > -1){ - window.alert($.i18n._('database-source')["alert-invalid-query-keyword"] + " INSERT"); - return false; - }else if(allCapsQuery.indexOf('ALTER') > -1){ - window.alert($.i18n._('database-source')["alert-invalid-query-keyword"] + " ALTER"); - return false; - }else if(allCapsQuery.indexOf('UPDATE') > -1){ - window.alert($.i18n._('database-source')["alert-invalid-query-keyword"] + " UPDATE"); - return false; - }else if(allCapsQuery.indexOf('LIMIT') > -1){ - window.alert($.i18n._('database-source')["alert-invalid-query-keyword"] + " LIMIT"); - return false; - } - -// if ((allCapsQuery.indexOf('DROP') > -1) || (allCapsQuery.indexOf('TRUNCATE') > -1) || -// (allCapsQuery.indexOf('DELETE') > -1) || (allCapsQuery.indexOf('ROLLBACK') > -1) -// || (allCapsQuery.indexOf('SHUTDOWN') > -1) || (allCapsQuery.indexOf('INSERT') > -1) -// || (allCapsQuery.indexOf('ALTER') > -1) || (allCapsQuery.indexOf('UPDATE') > -1)) -// { -// window.alert($.i18n._('database-source')["alert-invalid-query-keyword"]); -// return false; -// } - - if(!allCapsQuery.startsWith('SELECT')) { - window.alert($.i18n._('database-source')["alert-invalid-query-select"]); - return false; - } - - return true; -}; - -Refine.DatabaseSourceUI.prototype._editConnection = function(connectionInfo) { - //alert("database user:" + connectionInfo.databaseUser); - var self = this; - $.ajax({ - url: 'command/database/saved-connection', - type: 'PUT', - contentType:'application/x-www-form-urlencoded', - data: connectionInfo, - success: function(settings) { - if(settings){ - $( "#menuListUl" ).empty(); - var items = []; - $.each(settings.savedConnections,function(index,savedConnection){ -// items.push('' -// + '' + savedConnection.connectionName + '' -// + ' '); - - items.push('
  • ' - + '' + savedConnection.connectionName + '' - + '
  • '); - }) - - $( "#menuListUl" ).append(items.join('')); - window.alert($.i18n._('database-source')["alert-connection-edit"]); - } - } - }).fail(function( jqXhr, textStatus, errorThrown ){ - alert( textStatus + ':' + errorThrown ); - }); - -}; - -Refine.DatabaseSourceUI.prototype._executeQuery = function(jdbcQueryInfo) { - var self = this; - //remove start line - - var dismiss = DialogSystem.showBusy($.i18n._('database-import')["checking"]); - //$("#executeQueryBtn").text('Please wait ...').attr('disabled','disabled'); - - $.post( - "command/database/test-query", - jdbcQueryInfo, - function(jdbcConnectionResult) { - // $("#executeQueryBtn").text('Preview Query Result').removeAttr('disabled'); - dismiss(); - self._controller.startImportingDocument(jdbcQueryInfo); - - }, - "json" - ).fail(function( jqXhr, textStatus, errorThrown ){ - //$("#executeQueryBtn").text('Preview Query Result').removeAttr('disabled'); - dismiss(); - alert( textStatus + ':' + errorThrown ); - }); - //remove end line - - //self._controller.startImportingDocument(jdbcQueryInfo); -} - -Refine.DatabaseSourceUI.prototype._saveConnection = function(jdbcConnectionInfo) { - var self = this; - $.post( - "command/database/saved-connection", - jdbcConnectionInfo, - function(settings) { - if(settings){ - -// self._elmts.scListGroupDiv.empty(); - self._elmts.menuListUl.empty(); - var items = []; - $.each(settings.savedConnections,function(index,savedConnection){ - -// items.push('' -// + '' + savedConnection.connectionName + '' -// + ' '); - - items.push('
  • ' - + '' + savedConnection.connectionName + '' - + '
  • '); - }) - - self._elmts.menuListUl.append(items.join('')); - } - - }, - "json" - ).fail(function( jqXhr, textStatus, errorThrown ){ - alert( textStatus + ':' + errorThrown ); - }); - -}; - -Refine.DatabaseSourceUI.prototype._loadSavedConnections = function() { - var self = this; - $.get( - "command/database/saved-connection", - null, - function(settings) { - if(settings){ - - self._elmts.menuListUl.empty(); - //self._elmts.scListGroupDiv.empty(); - var items = []; - $.each(settings.savedConnections,function(index,savedConnection){ - -// items.push('' -// + '' + savedConnection.connectionName + '' -// + ' '); - - items.push('
  • ' - + '' + savedConnection.connectionName + '' - + '
  • '); - - }) - - self._elmts.menuListUl.append(items.join('')); - // self._elmts.scListGroupDiv.append(items.join('')); - } - - }, - "json" - ); - -}; - -Refine.DatabaseSourceUI.prototype._testDatabaseConnect = function(jdbcConnectionInfo) { - - var self = this; - $.post( - "command/database/test-connect", - jdbcConnectionInfo, - function(jdbcConnectionResult) { - if(jdbcConnectionResult && jdbcConnectionResult.connectionResult == true){ - window.alert("Test Connection Succeeded!"); - }else{ - window.alert("Unable to establish connection to database"); - } - - }, - "json" - ).fail(function( jqXhr, textStatus, errorThrown ){ - alert( textStatus + ':' + errorThrown ); - }); -}; - -Refine.DatabaseSourceUI.prototype._connect = function(jdbcConnectionInfo) { - - var self = this; - $.post( - "command/database/connect", - jdbcConnectionInfo, - function(databaseInfo) { - - if(databaseInfo){ - $( "#currentConnectionNameInput" ).val(jdbcConnectionInfo.connectionName); - $( "#currentDatabaseTypeInput" ).val(jdbcConnectionInfo.databaseType); - $( "#currentDatabaseUserInput" ).val(jdbcConnectionInfo.databaseUser); - $( "#currentDatabasePasswordInput" ).val(jdbcConnectionInfo.databasePassword); - $( "#currentDatabaseHostInput" ).val(jdbcConnectionInfo.databaseServer); - $( "#currentDatabasePortInput" ).val(jdbcConnectionInfo.databasePort); - $( "#currentInitialDatabaseInput" ).val(jdbcConnectionInfo.initialDatabase); - - var connectionParam = "Connection :: " - + "jdbc:" - + jdbcConnectionInfo.databaseType + "://" - + jdbcConnectionInfo.databaseServer + ":" - + jdbcConnectionInfo.databasePort + "/" - + jdbcConnectionInfo.initialDatabase; - - //alert("connectionParam::" + connectionParam); - $( "#connectionParameterSpan" ).text(connectionParam); - // self._body.find('.newConnectionDiv').hide(); - // self._body.find('.sqlEditorDiv').show(); - $( "#newConnectionDiv" ).hide(); - $( "#sqlEditorDiv" ).show(); - - }else{ - window.alert("Unable to establish connection to database"); - return; - } - - }, - "json" - ).fail(function( jqXhr, textStatus, errorThrown ){ - alert( textStatus + ':' + errorThrown ); - }); - -}; - -Refine.DatabaseSourceUI.prototype._getConnectionInfo = function() { - var self = this; - var jdbcConnectionInfo = {}; - jdbcConnectionInfo.connectionName = $.trim(self._elmts.connectionNameInput[0].value); - jdbcConnectionInfo.databaseType = $.trim(self._elmts.databaseTypeSelect[0].value); - jdbcConnectionInfo.databaseServer = $.trim(self._elmts.databaseHostInput[0].value); - jdbcConnectionInfo.databasePort = $.trim(self._elmts.databasePortInput[0].value); - jdbcConnectionInfo.databaseUser = $.trim(self._elmts.databaseUserInput[0].value); - jdbcConnectionInfo.databasePassword = $.trim(self._elmts.databasePasswordInput[0].value); - jdbcConnectionInfo.initialDatabase = $.trim(self._elmts.initialDatabaseInput[0].value); - jdbcConnectionInfo.initialSchema = $.trim(self._elmts.initialSchemaInput[0].value); - return jdbcConnectionInfo; - -} - -Refine.DatabaseSourceUI.prototype._validateNewConnectionForm = function() { - - var self = this; - var connectionNameInput = $.trim(self._elmts.connectionNameInput[0].value); - var databaseTypeSelect = $.trim(self._elmts.databaseTypeSelect[0].value); - var databaseHostInput = $.trim(self._elmts.databaseHostInput[0].value); - var databasePortInput = $.trim(self._elmts.databasePortInput[0].value); - var databaseUserInput = $.trim(self._elmts.databaseUserInput[0].value); - var databasePasswordInput = $.trim(self._elmts.databasePasswordInput[0].value); - var initialDatabaseInput = $.trim(self._elmts.initialDatabaseInput[0].value); - var initialSchemaInput = $.trim(self._elmts.initialSchemaInput[0].value); - - if (databaseHostInput.length === 0) { - window.alert($.i18n._('database-source')["alert-server"]); - return false; - }else if(databasePortInput.length === 0){ - window.alert($.i18n._('database-source')["alert-port"]); - return false; - }else if(databaseUserInput.length === 0){ - window.alert($.i18n._('database-source')["alert-user"]); - return false; - }else if(initialDatabaseInput.length === 0){ - window.alert($.i18n._('database-source')["alert-initial-database"]); - return false; - } - else{ - return true; - - } - - return true; -}; - -Refine.DatabaseSourceUI.prototype._resetDatabaseImportForm = function() { - var self = this; - $( "#connectionName" ).val("127.0.0.1"); - $( "#databaseTypeSelect" ).val("postgresql"); - $( "#databaseHost" ).val("127.0.0.1"); - $( "#databasePort" ).val("5432"); - $( "#databaseUser" ).val("postgres"); - $( "#databasePassword" ).val(""); - $( "#initialDatabase" ).val(""); - $( "#initialSchema" ).val(""); - - $( "#editConnectionControlDiv" ).hide(); - $( "#newConnectionControlDiv" ).show(); - $('#connectionName').removeAttr('readonly'); - -}; diff --git a/extensions/database/module/scripts/index/jquery.contextMenu.min.js b/extensions/database/module/scripts/index/jquery.contextMenu.min.js deleted file mode 100644 index bf6b6169f..000000000 --- a/extensions/database/module/scripts/index/jquery.contextMenu.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e("object"==typeof exports?require("jquery"):jQuery)}(function(e){"use strict";function t(e){for(var t,n=e.split(/\s+/),a=[],o=0;t=n[o];o++)t=t.charAt(0).toUpperCase(),a.push(t);return a}function n(t){return t.id&&e('label[for="'+t.id+'"]').val()||t.name}function a(t,o,s){return s||(s=0),o.each(function(){var o,i,c=e(this),l=this,r=this.nodeName.toLowerCase();switch("label"===r&&c.find("input, textarea, select").length&&(o=c.text(),r=(l=(c=c.children().first()).get(0)).nodeName.toLowerCase()),r){case"menu":i={name:c.attr("label"),items:{}},s=a(i.items,c.children(),s);break;case"a":case"button":i={name:c.text(),disabled:!!c.attr("disabled"),callback:function(){c.get(0).click()}};break;case"menuitem":case"command":switch(c.attr("type")){case void 0:case"command":case"menuitem":i={name:c.attr("label"),disabled:!!c.attr("disabled"),icon:c.attr("icon"),callback:function(){c.get(0).click()}};break;case"checkbox":i={type:"checkbox",disabled:!!c.attr("disabled"),name:c.attr("label"),selected:!!c.attr("checked")};break;case"radio":i={type:"radio",disabled:!!c.attr("disabled"),name:c.attr("label"),radio:c.attr("radiogroup"),value:c.attr("id"),selected:!!c.attr("checked")};break;default:i=void 0}break;case"hr":i="-------";break;case"input":switch(c.attr("type")){case"text":i={type:"text",name:o||n(l),disabled:!!c.attr("disabled"),value:c.val()};break;case"checkbox":i={type:"checkbox",name:o||n(l),disabled:!!c.attr("disabled"),selected:!!c.attr("checked")};break;case"radio":i={type:"radio",name:o||n(l),disabled:!!c.attr("disabled"),radio:!!c.attr("name"),value:c.val(),selected:!!c.attr("checked")};break;default:i=void 0}break;case"select":i={type:"select",name:o||n(l),disabled:!!c.attr("disabled"),selected:c.val(),options:{}},c.children().each(function(){i.options[this.value]=e(this).text()});break;case"textarea":i={type:"textarea",name:o||n(l),disabled:!!c.attr("disabled"),value:c.val()};break;case"label":break;default:i={type:"html",html:c.clone(!0)}}i&&(t["key"+ ++s]=i)}),s}e.support.htmlMenuitem="HTMLMenuItemElement"in window,e.support.htmlCommand="HTMLCommandElement"in window,e.support.eventSelectstart="onselectstart"in document.documentElement,e.ui&&e.widget||(e.cleanData=function(t){return function(n){var a,o,s;for(s=0;null!=n[s];s++){o=n[s];try{(a=e._data(o,"events"))&&a.remove&&e(o).triggerHandler("remove")}catch(e){}}t(n)}}(e.cleanData));var o=null,s=!1,i=e(window),c=0,l={},r={},u={},d={selector:null,appendTo:null,trigger:"right",autoHide:!1,delay:200,reposition:!0,hideOnSecondTrigger:!1,selectableSubMenu:!1,classNames:{hover:"context-menu-hover",disabled:"context-menu-disabled",visible:"context-menu-visible",notSelectable:"context-menu-not-selectable",icon:"context-menu-icon",iconEdit:"context-menu-icon-edit",iconCut:"context-menu-icon-cut",iconCopy:"context-menu-icon-copy",iconPaste:"context-menu-icon-paste",iconDelete:"context-menu-icon-delete",iconAdd:"context-menu-icon-add",iconQuit:"context-menu-icon-quit",iconLoadingClass:"context-menu-icon-loading"},determinePosition:function(t){if(e.ui&&e.ui.position)t.css("display","block").position({my:"center top",at:"center bottom",of:this,offset:"0 5",collision:"fit"}).css("display","none");else{var n=this.offset();n.top+=this.outerHeight(),n.left+=this.outerWidth()/2-t.outerWidth()/2,t.css(n)}},position:function(e,t,n){var a;if(t||n){if("maintain"===t&&"maintain"===n)a=e.$menu.position();else{var o=e.$menu.offsetParent().offset();a={top:n-o.top,left:t-o.left}}var s=i.scrollTop()+i.height(),c=i.scrollLeft()+i.width(),l=e.$menu.outerHeight(),r=e.$menu.outerWidth();a.top+l>s&&(a.top-=l),a.top<0&&(a.top=0),a.left+r>c&&(a.left-=r),a.left<0&&(a.left=0),e.$menu.css(a)}else e.determinePosition.call(this,e.$menu)},positionSubmenu:function(t){if(void 0!==t)if(e.ui&&e.ui.position)t.css("display","block").position({my:"left top-5",at:"right top",of:this,collision:"flipfit fit"}).css("display","");else{var n={top:-9,left:this.outerWidth()-5};t.css(n)}},zIndex:1,animation:{duration:50,show:"slideDown",hide:"slideUp"},events:{show:e.noop,hide:e.noop,activated:e.noop},callback:null,items:{}},m={timer:null,pageX:null,pageY:null},p=function(e){for(var t=0,n=e;;)if(t=Math.max(t,parseInt(n.css("z-index"),10)||0),!(n=n.parent())||!n.length||"html body".indexOf(n.prop("nodeName").toLowerCase())>-1)break;return t},f={abortevent:function(e){e.preventDefault(),e.stopImmediatePropagation()},contextmenu:function(t){var n=e(this);if("right"===t.data.trigger&&(t.preventDefault(),t.stopImmediatePropagation()),!("right"!==t.data.trigger&&"demand"!==t.data.trigger&&t.originalEvent||!(void 0===t.mouseButton||!t.data||"left"===t.data.trigger&&0===t.mouseButton||"right"===t.data.trigger&&2===t.mouseButton)||n.hasClass("context-menu-active")||n.hasClass("context-menu-disabled"))){if(o=n,t.data.build){var a=t.data.build(o,t);if(!1===a)return;if(t.data=e.extend(!0,{},d,t.data,a||{}),!t.data.items||e.isEmptyObject(t.data.items))throw window.console&&(console.error||console.log).call(console,"No items specified to show in contextMenu"),new Error("No Items specified");t.data.$trigger=o,h.create(t.data)}var s=!1;for(var i in t.data.items)if(t.data.items.hasOwnProperty(i)){(e.isFunction(t.data.items[i].visible)?t.data.items[i].visible.call(e(t.currentTarget),i,t.data):void 0===t.data.items[i]||!t.data.items[i].visible||!0===t.data.items[i].visible)&&(s=!0)}s&&h.show.call(n,t.data,t.pageX,t.pageY)}},click:function(t){t.preventDefault(),t.stopImmediatePropagation(),e(this).trigger(e.Event("contextmenu",{data:t.data,pageX:t.pageX,pageY:t.pageY}))},mousedown:function(t){var n=e(this);o&&o.length&&!o.is(n)&&o.data("contextMenu").$menu.trigger("contextmenu:hide"),2===t.button&&(o=n.data("contextMenuActive",!0))},mouseup:function(t){var n=e(this);n.data("contextMenuActive")&&o&&o.length&&o.is(n)&&!n.hasClass("context-menu-disabled")&&(t.preventDefault(),t.stopImmediatePropagation(),o=n,n.trigger(e.Event("contextmenu",{data:t.data,pageX:t.pageX,pageY:t.pageY}))),n.removeData("contextMenuActive")},mouseenter:function(t){var n=e(this),a=e(t.relatedTarget),s=e(document);a.is(".context-menu-list")||a.closest(".context-menu-list").length||o&&o.length||(m.pageX=t.pageX,m.pageY=t.pageY,m.data=t.data,s.on("mousemove.contextMenuShow",f.mousemove),m.timer=setTimeout(function(){m.timer=null,s.off("mousemove.contextMenuShow"),o=n,n.trigger(e.Event("contextmenu",{data:m.data,pageX:m.pageX,pageY:m.pageY}))},t.data.delay))},mousemove:function(e){m.pageX=e.pageX,m.pageY=e.pageY},mouseleave:function(t){var n=e(t.relatedTarget);if(!n.is(".context-menu-list")&&!n.closest(".context-menu-list").length){try{clearTimeout(m.timer)}catch(t){}m.timer=null}},layerClick:function(t){var n,a,o=e(this).data("contextMenuRoot"),s=t.button,c=t.pageX,l=t.pageY;t.preventDefault(),setTimeout(function(){var r,u="left"===o.trigger&&0===s||"right"===o.trigger&&2===s;if(document.elementFromPoint&&o.$layer){if(o.$layer.hide(),(n=document.elementFromPoint(c-i.scrollLeft(),l-i.scrollTop())).isContentEditable){var d=document.createRange(),m=window.getSelection();d.selectNode(n),d.collapse(!0),m.removeAllRanges(),m.addRange(d)}e(n).trigger(t),o.$layer.show()}if(o.hideOnSecondTrigger&&u&&null!==o.$menu&&void 0!==o.$menu)o.$menu.trigger("contextmenu:hide");else{if(o.reposition&&u)if(document.elementFromPoint){if(o.$trigger.is(n))return void o.position.call(o.$trigger,o,c,l)}else if(a=o.$trigger.offset(),r=e(window),a.top+=r.scrollTop(),a.top<=t.pageY&&(a.left+=r.scrollLeft(),a.left<=t.pageX&&(a.bottom=a.top+o.$trigger.outerHeight(),a.bottom>=t.pageY&&(a.right=a.left+o.$trigger.outerWidth(),a.right>=t.pageX))))return void o.position.call(o.$trigger,o,c,l);n&&u&&o.$trigger.one("contextmenu:hidden",function(){e(n).contextMenu({x:c,y:l,button:s})}),null!==o&&void 0!==o&&null!==o.$menu&&void 0!==o.$menu&&o.$menu.trigger("contextmenu:hide")}},50)},keyStop:function(e,t){t.isInput||e.preventDefault(),e.stopPropagation()},key:function(e){var t={};o&&(t=o.data("contextMenu")||{}),void 0===t.zIndex&&(t.zIndex=0);var n=0,a=function(e){""!==e.style.zIndex?n=e.style.zIndex:null!==e.offsetParent&&void 0!==e.offsetParent?a(e.offsetParent):null!==e.parentElement&&void 0!==e.parentElement&&a(e.parentElement)};if(a(e.target),!(t.$menu&&parseInt(n,10)>parseInt(t.$menu.css("zIndex"),10))){switch(e.keyCode){case 9:case 38:if(f.keyStop(e,t),t.isInput){if(9===e.keyCode&&e.shiftKey)return e.preventDefault(),t.$selected&&t.$selected.find("input, textarea, select").blur(),void(null!==t.$menu&&void 0!==t.$menu&&t.$menu.trigger("prevcommand"));if(38===e.keyCode&&"checkbox"===t.$selected.find("input, textarea, select").prop("type"))return void e.preventDefault()}else if(9!==e.keyCode||e.shiftKey)return void(null!==t.$menu&&void 0!==t.$menu&&t.$menu.trigger("prevcommand"));break;case 40:if(f.keyStop(e,t),!t.isInput)return void(null!==t.$menu&&void 0!==t.$menu&&t.$menu.trigger("nextcommand"));if(9===e.keyCode)return e.preventDefault(),t.$selected&&t.$selected.find("input, textarea, select").blur(),void(null!==t.$menu&&void 0!==t.$menu&&t.$menu.trigger("nextcommand"));if(40===e.keyCode&&"checkbox"===t.$selected.find("input, textarea, select").prop("type"))return void e.preventDefault();break;case 37:if(f.keyStop(e,t),t.isInput||!t.$selected||!t.$selected.length)break;if(!t.$selected.parent().hasClass("context-menu-root")){var s=t.$selected.parent().parent();return t.$selected.trigger("contextmenu:blur"),void(t.$selected=s)}break;case 39:if(f.keyStop(e,t),t.isInput||!t.$selected||!t.$selected.length)break;var i=t.$selected.data("contextMenu")||{};if(i.$menu&&t.$selected.hasClass("context-menu-submenu"))return t.$selected=null,i.$selected=null,void i.$menu.trigger("nextcommand");break;case 35:case 36:return t.$selected&&t.$selected.find("input, textarea, select").length?void 0:((t.$selected&&t.$selected.parent()||t.$menu).children(":not(."+t.classNames.disabled+", ."+t.classNames.notSelectable+")")[36===e.keyCode?"first":"last"]().trigger("contextmenu:focus"),void e.preventDefault());case 13:if(f.keyStop(e,t),t.isInput){if(t.$selected&&!t.$selected.is("textarea, select"))return void e.preventDefault();break}return void(void 0!==t.$selected&&null!==t.$selected&&t.$selected.trigger("mouseup"));case 32:case 33:case 34:return void f.keyStop(e,t);case 27:return f.keyStop(e,t),void(null!==t.$menu&&void 0!==t.$menu&&t.$menu.trigger("contextmenu:hide"));default:var c=String.fromCharCode(e.keyCode).toUpperCase();if(t.accesskeys&&t.accesskeys[c])return void t.accesskeys[c].$node.trigger(t.accesskeys[c].$menu?"contextmenu:focus":"mouseup")}e.stopPropagation(),void 0!==t.$selected&&null!==t.$selected&&t.$selected.trigger(e)}},prevItem:function(t){t.stopPropagation();var n=e(this).data("contextMenu")||{},a=e(this).data("contextMenuRoot")||{};if(n.$selected){var o=n.$selected;(n=n.$selected.parent().data("contextMenu")||{}).$selected=o}for(var s=n.$menu.children(),i=n.$selected&&n.$selected.prev().length?n.$selected.prev():s.last(),c=i;i.hasClass(a.classNames.disabled)||i.hasClass(a.classNames.notSelectable)||i.is(":hidden");)if((i=i.prev().length?i.prev():s.last()).is(c))return;n.$selected&&f.itemMouseleave.call(n.$selected.get(0),t),f.itemMouseenter.call(i.get(0),t);var l=i.find("input, textarea, select");l.length&&l.focus()},nextItem:function(t){t.stopPropagation();var n=e(this).data("contextMenu")||{},a=e(this).data("contextMenuRoot")||{};if(n.$selected){var o=n.$selected;(n=n.$selected.parent().data("contextMenu")||{}).$selected=o}for(var s=n.$menu.children(),i=n.$selected&&n.$selected.next().length?n.$selected.next():s.first(),c=i;i.hasClass(a.classNames.disabled)||i.hasClass(a.classNames.notSelectable)||i.is(":hidden");)if((i=i.next().length?i.next():s.first()).is(c))return;n.$selected&&f.itemMouseleave.call(n.$selected.get(0),t),f.itemMouseenter.call(i.get(0),t);var l=i.find("input, textarea, select");l.length&&l.focus()},focusInput:function(){var t=e(this).closest(".context-menu-item"),n=t.data(),a=n.contextMenu,o=n.contextMenuRoot;o.$selected=a.$selected=t,o.isInput=a.isInput=!0},blurInput:function(){var t=e(this).closest(".context-menu-item").data(),n=t.contextMenu;t.contextMenuRoot.isInput=n.isInput=!1},menuMouseenter:function(){e(this).data().contextMenuRoot.hovering=!0},menuMouseleave:function(t){var n=e(this).data().contextMenuRoot;n.$layer&&n.$layer.is(t.relatedTarget)&&(n.hovering=!1)},itemMouseenter:function(t){var n=e(this),a=n.data(),o=a.contextMenu,s=a.contextMenuRoot;s.hovering=!0,t&&s.$layer&&s.$layer.is(t.relatedTarget)&&(t.preventDefault(),t.stopImmediatePropagation()),(o.$menu?o:s).$menu.children("."+s.classNames.hover).trigger("contextmenu:blur").children(".hover").trigger("contextmenu:blur"),n.hasClass(s.classNames.disabled)||n.hasClass(s.classNames.notSelectable)?o.$selected=null:n.trigger("contextmenu:focus")},itemMouseleave:function(t){var n=e(this),a=n.data(),o=a.contextMenu,s=a.contextMenuRoot;if(s!==o&&s.$layer&&s.$layer.is(t.relatedTarget))return void 0!==s.$selected&&null!==s.$selected&&s.$selected.trigger("contextmenu:blur"),t.preventDefault(),t.stopImmediatePropagation(),void(s.$selected=o.$selected=o.$node);o&&o.$menu&&o.$menu.hasClass("context-menu-visible")||n.trigger("contextmenu:blur")},itemClick:function(t){var n,a=e(this),o=a.data(),s=o.contextMenu,i=o.contextMenuRoot,c=o.contextMenuKey;if(!(!s.items[c]||a.is("."+i.classNames.disabled+", .context-menu-separator, ."+i.classNames.notSelectable)||a.is(".context-menu-submenu")&&!1===i.selectableSubMenu)){if(t.preventDefault(),t.stopImmediatePropagation(),e.isFunction(s.callbacks[c])&&Object.prototype.hasOwnProperty.call(s.callbacks,c))n=s.callbacks[c];else{if(!e.isFunction(i.callback))return;n=i.callback}!1!==n.call(i.$trigger,c,i,t)?i.$menu.trigger("contextmenu:hide"):i.$menu.parent().length&&h.update.call(i.$trigger,i)}},inputClick:function(e){e.stopImmediatePropagation()},hideMenu:function(t,n){var a=e(this).data("contextMenuRoot");h.hide.call(a.$trigger,a,n&&n.force)},focusItem:function(t){t.stopPropagation();var n=e(this),a=n.data(),o=a.contextMenu,s=a.contextMenuRoot;n.hasClass(s.classNames.disabled)||n.hasClass(s.classNames.notSelectable)||(n.addClass([s.classNames.hover,s.classNames.visible].join(" ")).parent().find(".context-menu-item").not(n).removeClass(s.classNames.visible).filter("."+s.classNames.hover).trigger("contextmenu:blur"),o.$selected=s.$selected=n,o&&o.$node&&o.$node.hasClass("context-menu-submenu")&&o.$node.addClass(s.classNames.hover),o.$node&&s.positionSubmenu.call(o.$node,o.$menu))},blurItem:function(t){t.stopPropagation();var n=e(this),a=n.data(),o=a.contextMenu,s=a.contextMenuRoot;o.autoHide&&n.removeClass(s.classNames.visible),n.removeClass(s.classNames.hover),o.$selected=null}},h={show:function(t,n,a){var s=e(this),i={};if(e("#context-menu-layer").trigger("mousedown"),t.$trigger=s,!1!==t.events.show.call(s,t)){if(h.update.call(s,t),t.position.call(s,t,n,a),t.zIndex){var c=t.zIndex;"function"==typeof t.zIndex&&(c=t.zIndex.call(s,t)),i.zIndex=p(s)+c}h.layer.call(t.$menu,t,i.zIndex),t.$menu.find("ul").css("zIndex",i.zIndex+1),t.$menu.css(i)[t.animation.show](t.animation.duration,function(){s.trigger("contextmenu:visible"),h.activated(t),t.events.activated()}),s.data("contextMenu",t).addClass("context-menu-active"),e(document).off("keydown.contextMenu").on("keydown.contextMenu",f.key),t.autoHide&&e(document).on("mousemove.contextMenuAutoHide",function(e){var n=s.offset();n.right=n.left+s.outerWidth(),n.bottom=n.top+s.outerHeight(),!t.$layer||t.hovering||e.pageX>=n.left&&e.pageX<=n.right&&e.pageY>=n.top&&e.pageY<=n.bottom||setTimeout(function(){t.hovering||null===t.$menu||void 0===t.$menu||t.$menu.trigger("contextmenu:hide")},50)})}else o=null},hide:function(t,n){var a=e(this);if(t||(t=a.data("contextMenu")||{}),n||!t.events||!1!==t.events.hide.call(a,t)){if(a.removeData("contextMenu").removeClass("context-menu-active"),t.$layer){setTimeout(function(e){return function(){e.remove()}}(t.$layer),10);try{delete t.$layer}catch(e){t.$layer=null}}o=null,t.$menu.find("."+t.classNames.hover).trigger("contextmenu:blur"),t.$selected=null,t.$menu.find("."+t.classNames.visible).removeClass(t.classNames.visible),e(document).off(".contextMenuAutoHide").off("keydown.contextMenu"),t.$menu&&t.$menu[t.animation.hide](t.animation.duration,function(){t.build&&(t.$menu.remove(),e.each(t,function(e){switch(e){case"ns":case"selector":case"build":case"trigger":return!0;default:t[e]=void 0;try{delete t[e]}catch(e){}return!0}})),setTimeout(function(){a.trigger("contextmenu:hidden")},10)})}},create:function(n,a){function o(t){var n=e("");if(t._accesskey)t._beforeAccesskey&&n.append(document.createTextNode(t._beforeAccesskey)),e("").addClass("context-menu-accesskey").text(t._accesskey).appendTo(n),t._afterAccesskey&&n.append(document.createTextNode(t._afterAccesskey));else if(t.isHtmlName){if(void 0!==t.accesskey)throw new Error("accesskeys are not compatible with HTML names and cannot be used together in the same item");n.html(t.name)}else n.text(t.name);return n}void 0===a&&(a=n),n.$menu=e('
      ').addClass(n.className||"").data({contextMenu:n,contextMenuRoot:a}),e.each(["callbacks","commands","inputs"],function(e,t){n[t]={},a[t]||(a[t]={})}),a.accesskeys||(a.accesskeys={}),e.each(n.items,function(s,i){var c=e('
    • ').addClass(i.className||""),l=null,r=null;if(c.on("click",e.noop),"string"!=typeof i&&"cm_separator"!==i.type||(i={type:"cm_seperator"}),i.$node=c.data({contextMenu:n,contextMenuRoot:a,contextMenuKey:s}),void 0!==i.accesskey)for(var d,m=t(i.accesskey),p=0;d=m[p];p++)if(!a.accesskeys[d]){a.accesskeys[d]=i;var v=i.name.match(new RegExp("^(.*?)("+d+")(.*)$","i"));v&&(i._beforeAccesskey=v[1],i._accesskey=v[2],i._afterAccesskey=v[3]);break}if(i.type&&u[i.type])u[i.type].call(c,i,n,a),e.each([n,a],function(t,a){a.commands[s]=i,!e.isFunction(i.callback)||void 0!==a.callbacks[s]&&void 0!==n.type||(a.callbacks[s]=i.callback)});else{switch("cm_seperator"===i.type?c.addClass("context-menu-separator "+a.classNames.notSelectable):"html"===i.type?c.addClass("context-menu-html "+a.classNames.notSelectable):"sub"===i.type||(i.type?(l=e("").appendTo(c),o(i).appendTo(l),c.addClass("context-menu-input"),n.hasTypes=!0,e.each([n,a],function(e,t){t.commands[s]=i,t.inputs[s]=i})):i.items&&(i.type="sub")),i.type){case"cm_seperator":break;case"text":r=e('').attr("name","context-menu-input-"+s).val(i.value||"").appendTo(l);break;case"textarea":r=e('').attr("name","context-menu-input-"+s).val(i.value||"").appendTo(l),i.height&&r.height(i.height);break;case"checkbox":r=e('').attr("name","context-menu-input-"+s).val(i.value||"").prop("checked",!!i.selected).prependTo(l);break;case"radio":r=e('').attr("name","context-menu-input-"+i.radio).val(i.value||"").prop("checked",!!i.selected).prependTo(l);break;case"select":r=e('').attr("name","context-menu-input-"+s).appendTo(l),i.options&&(e.each(i.options,function(t,n){e("").val(t).text(n).appendTo(r)}),r.val(i.selected));break;case"sub":o(i).appendTo(c),i.appendTo=i.$node,c.data("contextMenu",i).addClass("context-menu-submenu"),i.callback=null,"function"==typeof i.items.then?h.processPromises(i,a,i.items):h.create(i,a);break;case"html":e(i.html).appendTo(c);break;default:e.each([n,a],function(t,a){a.commands[s]=i,!e.isFunction(i.callback)||void 0!==a.callbacks[s]&&void 0!==n.type||(a.callbacks[s]=i.callback)}),o(i).appendTo(c)}i.type&&"sub"!==i.type&&"html"!==i.type&&"cm_seperator"!==i.type&&(r.on("focus",f.focusInput).on("blur",f.blurInput),i.events&&r.on(i.events,n)),i.icon&&(e.isFunction(i.icon)?i._icon=i.icon.call(this,this,c,s,i):"string"==typeof i.icon&&"fa-"===i.icon.substring(0,3)?i._icon=a.classNames.icon+" "+a.classNames.icon+"--fa fa "+i.icon:i._icon=a.classNames.icon+" "+a.classNames.icon+"-"+i.icon,c.addClass(i._icon))}i.$input=r,i.$label=l,c.appendTo(n.$menu),!n.hasTypes&&e.support.eventSelectstart&&c.on("selectstart.disableTextSelect",f.abortevent)}),n.$node||n.$menu.css("display","none").addClass("context-menu-root"),n.$menu.appendTo(n.appendTo||document.body)},resize:function(t,n){var a;t.css({position:"absolute",display:"block"}),t.data("width",(a=t.get(0)).getBoundingClientRect?Math.ceil(a.getBoundingClientRect().width):t.outerWidth()+1),t.css({position:"static",minWidth:"0px",maxWidth:"100000px"}),t.find("> li > ul").each(function(){h.resize(e(this),!0)}),n||t.find("ul").addBack().css({position:"",display:"",minWidth:"",maxWidth:""}).outerWidth(function(){return e(this).data("width")})},update:function(t,n){var a=this;void 0===n&&(n=t,h.resize(t.$menu)),t.$menu.children().each(function(){var o,s=e(this),i=s.data("contextMenuKey"),c=t.items[i],l=e.isFunction(c.disabled)&&c.disabled.call(a,i,n)||!0===c.disabled;if(o=e.isFunction(c.visible)?c.visible.call(a,i,n):void 0===c.visible||!0===c.visible,s[o?"show":"hide"](),s[l?"addClass":"removeClass"](n.classNames.disabled),e.isFunction(c.icon)&&(s.removeClass(c._icon),c._icon=c.icon.call(this,a,s,i,c),s.addClass(c._icon)),c.type)switch(s.find("input, select, textarea").prop("disabled",l),c.type){case"text":case"textarea":c.$input.val(c.value||"");break;case"checkbox":case"radio":c.$input.val(c.value||"").prop("checked",!!c.selected);break;case"select":c.$input.val((0===c.selected?"0":c.selected)||"")}c.$menu&&h.update.call(a,c,n)})},layer:function(t,n){var a=t.$layer=e('
      ').css({height:i.height(),width:i.width(),display:"block",position:"fixed","z-index":n,top:0,left:0,opacity:0,filter:"alpha(opacity=0)","background-color":"#000"}).data("contextMenuRoot",t).insertBefore(this).on("contextmenu",f.abortevent).on("mousedown",f.layerClick);return void 0===document.body.style.maxWidth&&a.css({position:"absolute",height:e(document).height()}),a},processPromises:function(e,t,n){function a(e,t,n){void 0===n?(n={error:{name:"No items and no error item",icon:"context-menu-icon context-menu-icon-quit"}},window.console&&(console.error||console.log).call(console,'When you reject a promise, provide an "items" object, equal to normal sub-menu items')):"string"==typeof n&&(n={error:{name:n}}),o(e,t,n)}function o(e,t,n){void 0!==t.$menu&&t.$menu.is(":visible")&&(e.$node.removeClass(t.classNames.iconLoadingClass),e.items=n,h.create(e,t,!0),h.update(e,t),t.positionSubmenu.call(e.$node,e.$menu))}e.$node.addClass(t.classNames.iconLoadingClass),n.then(function(e,t,n){void 0===n&&a(void 0),o(e,t,n)}.bind(this,e,t),a.bind(this,e,t))},activated:function(t){var n=t.$menu,a=n.offset(),o=e(window).height(),s=e(window).scrollTop(),i=n.height();i>o?n.css({height:o+"px","overflow-x":"hidden","overflow-y":"auto",top:s+"px"}):(a.tops+o)&&n.css({top:"0px"})}};e.fn.contextMenu=function(t){var n=this,a=t;if(this.length>0)if(void 0===t)this.first().trigger("contextmenu");else if(void 0!==t.x&&void 0!==t.y)this.first().trigger(e.Event("contextmenu",{pageX:t.x,pageY:t.y,mouseButton:t.button}));else if("hide"===t){var o=this.first().data("contextMenu")?this.first().data("contextMenu").$menu:null;o&&o.trigger("contextmenu:hide")}else"destroy"===t?e.contextMenu("destroy",{context:this}):e.isPlainObject(t)?(t.context=this,e.contextMenu("create",t)):t?this.removeClass("context-menu-disabled"):t||this.addClass("context-menu-disabled");else e.each(r,function(){this.selector===n.selector&&(a.data=this,e.extend(a.data,{trigger:"demand"}))}),f.contextmenu.call(a.target,a);return this},e.contextMenu=function(t,n){"string"!=typeof t&&(n=t,t="create"),"string"==typeof n?n={selector:n}:void 0===n&&(n={});var a=e.extend(!0,{},d,n||{}),o=e(document),i=o,u=!1;switch(a.context&&a.context.length?(i=e(a.context).first(),a.context=i.get(0),u=!e(a.context).is(document)):a.context=document,t){case"update":if(u)h.update(i);else for(var m in r)r.hasOwnProperty(m)&&h.update(r[m]);break;case"create":if(!a.selector)throw new Error("No selector specified");if(a.selector.match(/.context-menu-(list|item|input)($|\s)/))throw new Error('Cannot bind to selector "'+a.selector+'" as it contains a reserved className');if(!a.build&&(!a.items||e.isEmptyObject(a.items)))throw new Error("No Items specified");if(c++,a.ns=".contextMenu"+c,u||(l[a.selector]=a.ns),r[a.ns]=a,a.trigger||(a.trigger="right"),!s){var p="click"===a.itemClickEvent?"click.contextMenu":"mouseup.contextMenu",v={"contextmenu:focus.contextMenu":f.focusItem,"contextmenu:blur.contextMenu":f.blurItem,"contextmenu.contextMenu":f.abortevent,"mouseenter.contextMenu":f.itemMouseenter,"mouseleave.contextMenu":f.itemMouseleave};v[p]=f.itemClick,o.on({"contextmenu:hide.contextMenu":f.hideMenu,"prevcommand.contextMenu":f.prevItem,"nextcommand.contextMenu":f.nextItem,"contextmenu.contextMenu":f.abortevent,"mouseenter.contextMenu":f.menuMouseenter,"mouseleave.contextMenu":f.menuMouseleave},".context-menu-list").on("mouseup.contextMenu",".context-menu-input",f.inputClick).on(v,".context-menu-item"),s=!0}switch(i.on("contextmenu"+a.ns,a.selector,a,f.contextmenu),u&&i.on("remove"+a.ns,function(){e(this).contextMenu("destroy")}),a.trigger){case"hover":i.on("mouseenter"+a.ns,a.selector,a,f.mouseenter).on("mouseleave"+a.ns,a.selector,a,f.mouseleave);break;case"left":i.on("click"+a.ns,a.selector,a,f.click);break;case"touchstart":i.on("touchstart"+a.ns,a.selector,a,f.click)}a.build||h.create(a);break;case"destroy":var x;if(u){var g=a.context;e.each(r,function(t,n){if(!n)return!0;if(!e(g).is(n.selector))return!0;(x=e(".context-menu-list").filter(":visible")).length&&x.data().contextMenuRoot.$trigger.is(e(n.context).find(n.selector))&&x.trigger("contextmenu:hide",{force:!0});try{r[n.ns].$menu&&r[n.ns].$menu.remove(),delete r[n.ns]}catch(e){r[n.ns]=null}return e(n.context).off(n.ns),!0})}else if(a.selector){if(l[a.selector]){(x=e(".context-menu-list").filter(":visible")).length&&x.data().contextMenuRoot.$trigger.is(a.selector)&&x.trigger("contextmenu:hide",{force:!0});try{r[l[a.selector]].$menu&&r[l[a.selector]].$menu.remove(),delete r[l[a.selector]]}catch(e){r[l[a.selector]]=null}o.off(l[a.selector])}}else o.off(".contextMenu .contextMenuAutoHide"),e.each(r,function(t,n){e(n.context).off(n.ns)}),l={},r={},c=0,s=!1,e("#context-menu-layer, .context-menu-list").remove();break;case"html5":(!e.support.htmlCommand&&!e.support.htmlMenuitem||"boolean"==typeof n&&n)&&e('menu[type="context"]').each(function(){this.id&&e.contextMenu({selector:"[contextmenu="+this.id+"]",items:e.contextMenu.fromMenu(this)})}).css("display","none");break;default:throw new Error('Unknown operation "'+t+'"')}return this},e.contextMenu.setInputValues=function(t,n){void 0===n&&(n={}),e.each(t.inputs,function(e,t){switch(t.type){case"text":case"textarea":t.value=n[e]||"";break;case"checkbox":t.selected=!!n[e];break;case"radio":t.selected=(n[t.radio]||"")===t.value;break;case"select":t.selected=n[e]||""}})},e.contextMenu.getInputValues=function(t,n){return void 0===n&&(n={}),e.each(t.inputs,function(e,t){switch(t.type){case"text":case"textarea":case"select":n[e]=t.$input.val();break;case"checkbox":n[e]=t.$input.prop("checked");break;case"radio":t.$input.prop("checked")&&(n[t.radio]=t.value)}}),n},e.contextMenu.fromMenu=function(t){var n={};return a(n,e(t).children()),n},e.contextMenu.defaults=d,e.contextMenu.types=u,e.contextMenu.handle=f,e.contextMenu.op=h,e.contextMenu.menus=r}); -//# sourceMappingURL=jquery.contextMenu.min.js.map diff --git a/extensions/database/module/scripts/index/jquery.ui.position.min.js b/extensions/database/module/scripts/index/jquery.ui.position.min.js deleted file mode 100644 index 48d6a99b4..000000000 --- a/extensions/database/module/scripts/index/jquery.ui.position.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! jQuery UI - v1.12.1 - 2016-09-16 - * http://jqueryui.com - * Includes: position.js - * Copyright jQuery Foundation and other contributors; Licensed MIT */ - -(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){t.ui=t.ui||{},t.ui.version="1.12.1",function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,l=/top|center|bottom/,h=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
      "),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};h>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),l.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,l=n-r,h=r+e.collisionWidth-a-n;e.collisionWidth>a?l>0&&0>=h?(i=t.left+l+e.collisionWidth-a-n,t.left+=l-i):t.left=h>0&&0>=l?n:l>h?n+a-e.collisionWidth:n:l>0?t.left+=l:h>0?t.left-=h:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,l=n-r,h=r+e.collisionHeight-a-n;e.collisionHeight>a?l>0&&0>=h?(i=t.top+l+e.collisionHeight-a-n,t.top+=l-i):t.top=h>0&&0>=l?n:l>h?n+a-e.collisionHeight:n:l>0?t.top+=l:h>0?t.top-=h:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,l=n.isWindow?n.scrollLeft:n.offset.left,h=t.left-e.collisionPosition.marginLeft,c=h-l,u=h+e.collisionWidth-r-l,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-l,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,l=n.isWindow?n.scrollTop:n.offset.top,h=t.top-e.collisionPosition.marginTop,c=h-l,u=h+e.collisionHeight-r-l,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-l,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position}); \ No newline at end of file diff --git a/extensions/database/module/scripts/project/database-exporters.js b/extensions/database/module/scripts/project/database-exporters.js deleted file mode 100644 index eacb5a488..000000000 --- a/extensions/database/module/scripts/project/database-exporters.js +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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. - */ - -var dictionary = ""; -$.ajax({ - url : "command/core/load-language?", - type : "POST", - async : false, - data : { - module : "database", - - }, - success : function(data) { - dictionary = data; - } -}); -$.i18n.setDictionary(dictionary); -// End internationalization - -(function() { - -})(); diff --git a/extensions/database/module/styles/bootstrap.css b/extensions/database/module/styles/bootstrap.css deleted file mode 100644 index 39e2a1597..000000000 --- a/extensions/database/module/styles/bootstrap.css +++ /dev/null @@ -1,1701 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2017 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -/*! - * Generated using the Bootstrap Customizer (http://getbootstrap.com/docs/3.3/customize/?id=3426e25f732fc7882717e871fd08de17) - * Config saved to config.json and https://gist.github.com/3426e25f732fc7882717e871fd08de17 - */ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ - -.panel { - margin-bottom: 20px; - background-color: #ffffff; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); -} -.panel-body { - padding: 15px; -} -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel-heading > .dropdown .dropdown-toggle { - color: inherit; -} -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; - color: inherit; -} -.panel-title > a, -.panel-title > small, -.panel-title > .small, -.panel-title > small > a, -.panel-title > .small > a { - color: inherit; -} -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #dddddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .list-group, -.panel > .panel-collapse > .list-group { - margin-bottom: 0; -} -.panel > .list-group .list-group-item, -.panel > .panel-collapse > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; -} -.panel > .list-group:first-child .list-group-item:first-child, -.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel > .list-group:last-child .list-group-item:last-child, -.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} -.list-group + .panel-footer { - border-top-width: 0; -} -.panel > .table, -.panel > .table-responsive > .table, -.panel > .panel-collapse > .table { - margin-bottom: 0; -} -.panel > .table caption, -.panel > .table-responsive > .table caption, -.panel > .panel-collapse > .table caption { - padding-left: 15px; - padding-right: 15px; -} -.panel > .table:first-child, -.panel > .table-responsive:first-child > .table:first-child { - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 3px; -} -.panel > .table:last-child, -.panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 3px; -} -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive, -.panel > .table + .panel-body, -.panel > .table-responsive + .panel-body { - border-top: 1px solid #dddddd; -} -.panel > .table > tbody:first-child > tr:first-child th, -.panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; -} -.panel > .table-bordered, -.panel > .table-responsive > .table-bordered { - border: 0; -} -.panel > .table-bordered > thead > tr > th:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, -.panel > .table-bordered > tbody > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, -.panel > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-bordered > thead > tr > td:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, -.panel > .table-bordered > tbody > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, -.panel > .table-bordered > tfoot > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; -} -.panel > .table-bordered > thead > tr > th:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, -.panel > .table-bordered > tbody > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, -.panel > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-bordered > thead > tr > td:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, -.panel > .table-bordered > tbody > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, -.panel > .table-bordered > tfoot > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; -} -.panel > .table-bordered > thead > tr:first-child > td, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, -.panel > .table-bordered > tbody > tr:first-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, -.panel > .table-bordered > thead > tr:first-child > th, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, -.panel > .table-bordered > tbody > tr:first-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; -} -.panel > .table-bordered > tbody > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, -.panel > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-bordered > tbody > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, -.panel > .table-bordered > tfoot > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; -} -.panel > .table-responsive { - border: 0; - margin-bottom: 0; -} -.panel-group { - margin-bottom: 20px; -} -.panel-group .panel { - margin-bottom: 0; - border-radius: 4px; -} -.panel-group .panel + .panel { - margin-top: 5px; -} -.panel-group .panel-heading { - border-bottom: 0; -} -.panel-group .panel-heading + .panel-collapse > .panel-body, -.panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 1px solid #dddddd; -} -.panel-group .panel-footer { - border-top: 0; -} -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #dddddd; -} -.panel-default { - border-color: #dddddd; -} -.panel-default > .panel-heading { - color: #333333; - background-color: #f5f5f5; - border-color: #dddddd; -} -.panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #dddddd; -} -.panel-default > .panel-heading .badge { - color: #f5f5f5; - background-color: #333333; -} -.panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #dddddd; -} -.panel-primary { - border-color: #337ab7; -} -.panel-primary > .panel-heading { - color: #ffffff; - background-color: #337ab7; - border-color: #337ab7; -} -.panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #337ab7; -} -.panel-primary > .panel-heading .badge { - color: #337ab7; - background-color: #ffffff; -} -.panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #337ab7; -} -.panel-success { - border-color: #d6e9c6; -} -.panel-success > .panel-heading { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #d6e9c6; -} -.panel-success > .panel-heading .badge { - color: #dff0d8; - background-color: #3c763d; -} -.panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #d6e9c6; -} -.panel-info { - border-color: #bce8f1; -} -.panel-info > .panel-heading { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.panel-info > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #bce8f1; -} -.panel-info > .panel-heading .badge { - color: #d9edf7; - background-color: #31708f; -} -.panel-info > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #bce8f1; -} -.panel-warning { - border-color: #faebcc; -} -.panel-warning > .panel-heading { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.panel-warning > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #faebcc; -} -.panel-warning > .panel-heading .badge { - color: #fcf8e3; - background-color: #8a6d3b; -} -.panel-warning > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #faebcc; -} -.panel-danger { - border-color: #ebccd1; -} -.panel-danger > .panel-heading { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.panel-danger > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ebccd1; -} -.panel-danger > .panel-heading .badge { - color: #f2dede; - background-color: #a94442; -} -.panel-danger > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ebccd1; -} -.clearfix:before, -.clearfix:after, -.nav:before, -.nav:after, -.panel-body:before, -.panel-body:after { - content: " "; - display: table; -} -.clearfix:after, -.nav:after, -.panel-body:after { - clear: both; -} -.center-block { - display: block; - margin-left: auto; - margin-right: auto; -} -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} -.hide { - display: none !important; -} -.show { - display: block !important; -} -.invisible { - visibility: hidden; -} -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.hidden { - display: none !important; -} -.affix { - position: fixed; -} - -.alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px; -} -.alert h4 { - margin-top: 0; - color: inherit; -} -.alert .alert-link { - font-weight: bold; -} -.alert > p, -.alert > ul { - margin-bottom: 0; -} -.alert > p + p { - margin-top: 5px; -} -.alert-dismissable, -.alert-dismissible { - padding-right: 35px; -} -.alert-dismissable .close, -.alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} -.alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; - color: #3c763d; -} -.alert-success hr { - border-top-color: #c9e2b3; -} -.alert-success .alert-link { - color: #2b542c; -} -.alert-info { - background-color: #d9edf7; - border-color: #bce8f1; - color: #31708f; -} -.alert-info hr { - border-top-color: #a6e1ec; -} -.alert-info .alert-link { - color: #245269; -} -.alert-warning { - background-color: #fcf8e3; - border-color: #faebcc; - color: #8a6d3b; -} -.alert-warning hr { - border-top-color: #f7e1b5; -} -.alert-warning .alert-link { - color: #66512c; -} -.alert-danger { - background-color: #f2dede; - border-color: #ebccd1; - color: #a94442; -} -.alert-danger hr { - border-top-color: #e4b9c0; -} -.alert-danger .alert-link { - color: #843534; -} - -@font-face { - font-family: 'Glyphicons Halflings'; - src: url('../images/fonts/glyphicons-halflings-regular.eot'); - src: url('../images/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../images/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../images/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../images/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../images/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); -} -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - font-style: normal; - font-weight: normal; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.glyphicon-asterisk:before { - content: "\002a"; -} -.glyphicon-plus:before { - content: "\002b"; -} -.glyphicon-euro:before, -.glyphicon-eur:before { - content: "\20ac"; -} -.glyphicon-minus:before { - content: "\2212"; -} -.glyphicon-cloud:before { - content: "\2601"; -} -.glyphicon-envelope:before { - content: "\2709"; -} -.glyphicon-pencil:before { - content: "\270f"; -} -.glyphicon-glass:before { - content: "\e001"; -} -.glyphicon-music:before { - content: "\e002"; -} -.glyphicon-search:before { - content: "\e003"; -} -.glyphicon-heart:before { - content: "\e005"; -} -.glyphicon-star:before { - content: "\e006"; -} -.glyphicon-star-empty:before { - content: "\e007"; -} -.glyphicon-user:before { - content: "\e008"; -} -.glyphicon-film:before { - content: "\e009"; -} -.glyphicon-th-large:before { - content: "\e010"; -} -.glyphicon-th:before { - content: "\e011"; -} -.glyphicon-th-list:before { - content: "\e012"; -} -.glyphicon-ok:before { - content: "\e013"; -} -.glyphicon-remove:before { - content: "\e014"; -} -.glyphicon-zoom-in:before { - content: "\e015"; -} -.glyphicon-zoom-out:before { - content: "\e016"; -} -.glyphicon-off:before { - content: "\e017"; -} -.glyphicon-signal:before { - content: "\e018"; -} -.glyphicon-cog:before { - content: "\e019"; -} -.glyphicon-trash:before { - content: "\e020"; -} -.glyphicon-home:before { - content: "\e021"; -} -.glyphicon-file:before { - content: "\e022"; -} -.glyphicon-time:before { - content: "\e023"; -} -.glyphicon-road:before { - content: "\e024"; -} -.glyphicon-download-alt:before { - content: "\e025"; -} -.glyphicon-download:before { - content: "\e026"; -} -.glyphicon-upload:before { - content: "\e027"; -} -.glyphicon-inbox:before { - content: "\e028"; -} -.glyphicon-play-circle:before { - content: "\e029"; -} -.glyphicon-repeat:before { - content: "\e030"; -} -.glyphicon-refresh:before { - content: "\e031"; -} -.glyphicon-list-alt:before { - content: "\e032"; -} -.glyphicon-lock:before { - content: "\e033"; -} -.glyphicon-flag:before { - content: "\e034"; -} -.glyphicon-headphones:before { - content: "\e035"; -} -.glyphicon-volume-off:before { - content: "\e036"; -} -.glyphicon-volume-down:before { - content: "\e037"; -} -.glyphicon-volume-up:before { - content: "\e038"; -} -.glyphicon-qrcode:before { - content: "\e039"; -} -.glyphicon-barcode:before { - content: "\e040"; -} -.glyphicon-tag:before { - content: "\e041"; -} -.glyphicon-tags:before { - content: "\e042"; -} -.glyphicon-book:before { - content: "\e043"; -} -.glyphicon-bookmark:before { - content: "\e044"; -} -.glyphicon-print:before { - content: "\e045"; -} -.glyphicon-camera:before { - content: "\e046"; -} -.glyphicon-font:before { - content: "\e047"; -} -.glyphicon-bold:before { - content: "\e048"; -} -.glyphicon-italic:before { - content: "\e049"; -} -.glyphicon-text-height:before { - content: "\e050"; -} -.glyphicon-text-width:before { - content: "\e051"; -} -.glyphicon-align-left:before { - content: "\e052"; -} -.glyphicon-align-center:before { - content: "\e053"; -} -.glyphicon-align-right:before { - content: "\e054"; -} -.glyphicon-align-justify:before { - content: "\e055"; -} -.glyphicon-list:before { - content: "\e056"; -} -.glyphicon-indent-left:before { - content: "\e057"; -} -.glyphicon-indent-right:before { - content: "\e058"; -} -.glyphicon-facetime-video:before { - content: "\e059"; -} -.glyphicon-picture:before { - content: "\e060"; -} -.glyphicon-map-marker:before { - content: "\e062"; -} -.glyphicon-adjust:before { - content: "\e063"; -} -.glyphicon-tint:before { - content: "\e064"; -} -.glyphicon-edit:before { - content: "\e065"; -} -.glyphicon-share:before { - content: "\e066"; -} -.glyphicon-check:before { - content: "\e067"; -} -.glyphicon-move:before { - content: "\e068"; -} -.glyphicon-step-backward:before { - content: "\e069"; -} -.glyphicon-fast-backward:before { - content: "\e070"; -} -.glyphicon-backward:before { - content: "\e071"; -} -.glyphicon-play:before { - content: "\e072"; -} -.glyphicon-pause:before { - content: "\e073"; -} -.glyphicon-stop:before { - content: "\e074"; -} -.glyphicon-forward:before { - content: "\e075"; -} -.glyphicon-fast-forward:before { - content: "\e076"; -} -.glyphicon-step-forward:before { - content: "\e077"; -} -.glyphicon-eject:before { - content: "\e078"; -} -.glyphicon-chevron-left:before { - content: "\e079"; -} -.glyphicon-chevron-right:before { - content: "\e080"; -} -.glyphicon-plus-sign:before { - content: "\e081"; -} -.glyphicon-minus-sign:before { - content: "\e082"; -} -.glyphicon-remove-sign:before { - content: "\e083"; -} -.glyphicon-ok-sign:before { - content: "\e084"; -} -.glyphicon-question-sign:before { - content: "\e085"; -} -.glyphicon-info-sign:before { - content: "\e086"; -} -.glyphicon-screenshot:before { - content: "\e087"; -} -.glyphicon-remove-circle:before { - content: "\e088"; -} -.glyphicon-ok-circle:before { - content: "\e089"; -} -.glyphicon-ban-circle:before { - content: "\e090"; -} -.glyphicon-arrow-left:before { - content: "\e091"; -} -.glyphicon-arrow-right:before { - content: "\e092"; -} -.glyphicon-arrow-up:before { - content: "\e093"; -} -.glyphicon-arrow-down:before { - content: "\e094"; -} -.glyphicon-share-alt:before { - content: "\e095"; -} -.glyphicon-resize-full:before { - content: "\e096"; -} -.glyphicon-resize-small:before { - content: "\e097"; -} -.glyphicon-exclamation-sign:before { - content: "\e101"; -} -.glyphicon-gift:before { - content: "\e102"; -} -.glyphicon-leaf:before { - content: "\e103"; -} -.glyphicon-fire:before { - content: "\e104"; -} -.glyphicon-eye-open:before { - content: "\e105"; -} -.glyphicon-eye-close:before { - content: "\e106"; -} -.glyphicon-warning-sign:before { - content: "\e107"; -} -.glyphicon-plane:before { - content: "\e108"; -} -.glyphicon-calendar:before { - content: "\e109"; -} -.glyphicon-random:before { - content: "\e110"; -} -.glyphicon-comment:before { - content: "\e111"; -} -.glyphicon-magnet:before { - content: "\e112"; -} -.glyphicon-chevron-up:before { - content: "\e113"; -} -.glyphicon-chevron-down:before { - content: "\e114"; -} -.glyphicon-retweet:before { - content: "\e115"; -} -.glyphicon-shopping-cart:before { - content: "\e116"; -} -.glyphicon-folder-close:before { - content: "\e117"; -} -.glyphicon-folder-open:before { - content: "\e118"; -} -.glyphicon-resize-vertical:before { - content: "\e119"; -} -.glyphicon-resize-horizontal:before { - content: "\e120"; -} -.glyphicon-hdd:before { - content: "\e121"; -} -.glyphicon-bullhorn:before { - content: "\e122"; -} -.glyphicon-bell:before { - content: "\e123"; -} -.glyphicon-certificate:before { - content: "\e124"; -} -.glyphicon-thumbs-up:before { - content: "\e125"; -} -.glyphicon-thumbs-down:before { - content: "\e126"; -} -.glyphicon-hand-right:before { - content: "\e127"; -} -.glyphicon-hand-left:before { - content: "\e128"; -} -.glyphicon-hand-up:before { - content: "\e129"; -} -.glyphicon-hand-down:before { - content: "\e130"; -} -.glyphicon-circle-arrow-right:before { - content: "\e131"; -} -.glyphicon-circle-arrow-left:before { - content: "\e132"; -} -.glyphicon-circle-arrow-up:before { - content: "\e133"; -} -.glyphicon-circle-arrow-down:before { - content: "\e134"; -} -.glyphicon-globe:before { - content: "\e135"; -} -.glyphicon-wrench:before { - content: "\e136"; -} -.glyphicon-tasks:before { - content: "\e137"; -} -.glyphicon-filter:before { - content: "\e138"; -} -.glyphicon-briefcase:before { - content: "\e139"; -} -.glyphicon-fullscreen:before { - content: "\e140"; -} -.glyphicon-dashboard:before { - content: "\e141"; -} -.glyphicon-paperclip:before { - content: "\e142"; -} -.glyphicon-heart-empty:before { - content: "\e143"; -} -.glyphicon-link:before { - content: "\e144"; -} -.glyphicon-phone:before { - content: "\e145"; -} -.glyphicon-pushpin:before { - content: "\e146"; -} -.glyphicon-usd:before { - content: "\e148"; -} -.glyphicon-gbp:before { - content: "\e149"; -} -.glyphicon-sort:before { - content: "\e150"; -} -.glyphicon-sort-by-alphabet:before { - content: "\e151"; -} -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; -} -.glyphicon-sort-by-order:before { - content: "\e153"; -} -.glyphicon-sort-by-order-alt:before { - content: "\e154"; -} -.glyphicon-sort-by-attributes:before { - content: "\e155"; -} -.glyphicon-sort-by-attributes-alt:before { - content: "\e156"; -} -.glyphicon-unchecked:before { - content: "\e157"; -} -.glyphicon-expand:before { - content: "\e158"; -} -.glyphicon-collapse-down:before { - content: "\e159"; -} -.glyphicon-collapse-up:before { - content: "\e160"; -} -.glyphicon-log-in:before { - content: "\e161"; -} -.glyphicon-flash:before { - content: "\e162"; -} -.glyphicon-log-out:before { - content: "\e163"; -} -.glyphicon-new-window:before { - content: "\e164"; -} -.glyphicon-record:before { - content: "\e165"; -} -.glyphicon-save:before { - content: "\e166"; -} -.glyphicon-open:before { - content: "\e167"; -} -.glyphicon-saved:before { - content: "\e168"; -} -.glyphicon-import:before { - content: "\e169"; -} -.glyphicon-export:before { - content: "\e170"; -} -.glyphicon-send:before { - content: "\e171"; -} -.glyphicon-floppy-disk:before { - content: "\e172"; -} -.glyphicon-floppy-saved:before { - content: "\e173"; -} -.glyphicon-floppy-remove:before { - content: "\e174"; -} -.glyphicon-floppy-save:before { - content: "\e175"; -} -.glyphicon-floppy-open:before { - content: "\e176"; -} -.glyphicon-credit-card:before { - content: "\e177"; -} -.glyphicon-transfer:before { - content: "\e178"; -} -.glyphicon-cutlery:before { - content: "\e179"; -} -.glyphicon-header:before { - content: "\e180"; -} -.glyphicon-compressed:before { - content: "\e181"; -} -.glyphicon-earphone:before { - content: "\e182"; -} -.glyphicon-phone-alt:before { - content: "\e183"; -} -.glyphicon-tower:before { - content: "\e184"; -} -.glyphicon-stats:before { - content: "\e185"; -} -.glyphicon-sd-video:before { - content: "\e186"; -} -.glyphicon-hd-video:before { - content: "\e187"; -} -.glyphicon-subtitles:before { - content: "\e188"; -} -.glyphicon-sound-stereo:before { - content: "\e189"; -} -.glyphicon-sound-dolby:before { - content: "\e190"; -} -.glyphicon-sound-5-1:before { - content: "\e191"; -} -.glyphicon-sound-6-1:before { - content: "\e192"; -} -.glyphicon-sound-7-1:before { - content: "\e193"; -} -.glyphicon-copyright-mark:before { - content: "\e194"; -} -.glyphicon-registration-mark:before { - content: "\e195"; -} -.glyphicon-cloud-download:before { - content: "\e197"; -} -.glyphicon-cloud-upload:before { - content: "\e198"; -} -.glyphicon-tree-conifer:before { - content: "\e199"; -} -.glyphicon-tree-deciduous:before { - content: "\e200"; -} -.glyphicon-cd:before { - content: "\e201"; -} -.glyphicon-save-file:before { - content: "\e202"; -} -.glyphicon-open-file:before { - content: "\e203"; -} -.glyphicon-level-up:before { - content: "\e204"; -} -.glyphicon-copy:before { - content: "\e205"; -} -.glyphicon-paste:before { - content: "\e206"; -} -.glyphicon-alert:before { - content: "\e209"; -} -.glyphicon-equalizer:before { - content: "\e210"; -} -.glyphicon-king:before { - content: "\e211"; -} -.glyphicon-queen:before { - content: "\e212"; -} -.glyphicon-pawn:before { - content: "\e213"; -} -.glyphicon-bishop:before { - content: "\e214"; -} -.glyphicon-knight:before { - content: "\e215"; -} -.glyphicon-baby-formula:before { - content: "\e216"; -} -.glyphicon-tent:before { - content: "\26fa"; -} -.glyphicon-blackboard:before { - content: "\e218"; -} -.glyphicon-bed:before { - content: "\e219"; -} -.glyphicon-apple:before { - content: "\f8ff"; -} -.glyphicon-erase:before { - content: "\e221"; -} -.glyphicon-hourglass:before { - content: "\231b"; -} -.glyphicon-lamp:before { - content: "\e223"; -} -.glyphicon-duplicate:before { - content: "\e224"; -} -.glyphicon-piggy-bank:before { - content: "\e225"; -} -.glyphicon-scissors:before { - content: "\e226"; -} -.glyphicon-bitcoin:before { - content: "\e227"; -} -.glyphicon-btc:before { - content: "\e227"; -} -.glyphicon-xbt:before { - content: "\e227"; -} -.glyphicon-yen:before { - content: "\00a5"; -} -.glyphicon-jpy:before { - content: "\00a5"; -} -.glyphicon-ruble:before { - content: "\20bd"; -} -.glyphicon-rub:before { - content: "\20bd"; -} -.glyphicon-scale:before { - content: "\e230"; -} -.glyphicon-ice-lolly:before { - content: "\e231"; -} -.glyphicon-ice-lolly-tasted:before { - content: "\e232"; -} -.glyphicon-education:before { - content: "\e233"; -} -.glyphicon-option-horizontal:before { - content: "\e234"; -} -.glyphicon-option-vertical:before { - content: "\e235"; -} -.glyphicon-menu-hamburger:before { - content: "\e236"; -} -.glyphicon-modal-window:before { - content: "\e237"; -} -.glyphicon-oil:before { - content: "\e238"; -} -.glyphicon-grain:before { - content: "\e239"; -} -.glyphicon-sunglasses:before { - content: "\e240"; -} -.glyphicon-text-size:before { - content: "\e241"; -} -.glyphicon-text-color:before { - content: "\e242"; -} -.glyphicon-text-background:before { - content: "\e243"; -} -.glyphicon-object-align-top:before { - content: "\e244"; -} -.glyphicon-object-align-bottom:before { - content: "\e245"; -} -.glyphicon-object-align-horizontal:before { - content: "\e246"; -} -.glyphicon-object-align-left:before { - content: "\e247"; -} -.glyphicon-object-align-vertical:before { - content: "\e248"; -} -.glyphicon-object-align-right:before { - content: "\e249"; -} -.glyphicon-triangle-right:before { - content: "\e250"; -} -.glyphicon-triangle-left:before { - content: "\e251"; -} -.glyphicon-triangle-bottom:before { - content: "\e252"; -} -.glyphicon-triangle-top:before { - content: "\e253"; -} -.glyphicon-console:before { - content: "\e254"; -} -.glyphicon-superscript:before { - content: "\e255"; -} -.glyphicon-subscript:before { - content: "\e256"; -} -.glyphicon-menu-left:before { - content: "\e257"; -} -.glyphicon-menu-right:before { - content: "\e258"; -} -.glyphicon-menu-down:before { - content: "\e259"; -} -.glyphicon-menu-up:before { - content: "\e260"; -} - -.nav { - margin-bottom: 0; - padding-left: 0; - list-style: none; -} -.nav > li { - position: relative; - display: block; -} -.nav > li > a { - position: relative; - display: block; - padding: 10px 15px; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} -.nav > li.disabled > a { - color: #777777; -} -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #777777; - text-decoration: none; - background-color: transparent; - cursor: not-allowed; -} -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #eeeeee; - border-color: #337ab7; -} -.nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.nav > li > a > img { - max-width: none; -} -.nav-tabs { - border-bottom: 1px solid #dddddd; -} -.nav-tabs > li { - float: left; - margin-bottom: -1px; -} -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.42857143; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #dddddd; -} -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #555555; - background-color: #ffffff; - border: 1px solid #dddddd; - border-bottom-color: transparent; - cursor: default; -} -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; -} -.nav-tabs.nav-justified > li { - float: none; -} -.nav-tabs.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-tabs.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-tabs.nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs.nav-justified > .active > a, -.nav-tabs.nav-justified > .active > a:hover, -.nav-tabs.nav-justified > .active > a:focus { - border: 1px solid #dddddd; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #dddddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs.nav-justified > .active > a, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #ffffff; - } -} -.nav-pills > li { - float: left; -} -.nav-pills > li > a { - border-radius: 4px; -} -.nav-pills > li + li { - margin-left: 2px; -} -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #ffffff; - background-color: #337ab7; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; -} -.nav-justified { - width: 100%; -} -.nav-justified > li { - float: none; -} -.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs-justified { - border-bottom: 0; -} -.nav-tabs-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs-justified > .active > a, -.nav-tabs-justified > .active > a:hover, -.nav-tabs-justified > .active > a:focus { - border: 1px solid #dddddd; -} -@media (min-width: 768px) { - .nav-tabs-justified > li > a { - border-bottom: 1px solid #dddddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus { - border-bottom-color: #ffffff; - } -} -/* -* List Group -*/ -.list-group { - margin-bottom: 20px; - padding-left: 0; -} -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #ffffff; - border: 1px solid #dddddd; -} -.list-group-item:first-child { - border-top-right-radius: 4px; - border-top-left-radius: 4px; -} -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -a.list-group-item, -button.list-group-item { - color: #555555; -} -a.list-group-item .list-group-item-heading, -button.list-group-item .list-group-item-heading { - color: #333333; -} -a.list-group-item:hover, -button.list-group-item:hover, -a.list-group-item:focus, -button.list-group-item:focus { - text-decoration: none; - color: #555555; - background-color: #f5f5f5; -} -button.list-group-item { - width: 100%; - text-align: left; -} -.list-group-item.disabled, -.list-group-item.disabled:hover, -.list-group-item.disabled:focus { - background-color: #eeeeee; - color: #777777; - cursor: not-allowed; -} -.list-group-item.disabled .list-group-item-heading, -.list-group-item.disabled:hover .list-group-item-heading, -.list-group-item.disabled:focus .list-group-item-heading { - color: inherit; -} -.list-group-item.disabled .list-group-item-text, -.list-group-item.disabled:hover .list-group-item-text, -.list-group-item.disabled:focus .list-group-item-text { - color: #777777; -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #ffffff; - background-color: #337ab7; - border-color: #337ab7; -} -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading, -.list-group-item.active .list-group-item-heading > small, -.list-group-item.active:hover .list-group-item-heading > small, -.list-group-item.active:focus .list-group-item-heading > small, -.list-group-item.active .list-group-item-heading > .small, -.list-group-item.active:hover .list-group-item-heading > .small, -.list-group-item.active:focus .list-group-item-heading > .small { - color: inherit; -} -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #c7ddef; -} -.list-group-item-success { - color: #3c763d; - background-color: #dff0d8; -} -a.list-group-item-success, -button.list-group-item-success { - color: #3c763d; -} -a.list-group-item-success .list-group-item-heading, -button.list-group-item-success .list-group-item-heading { - color: inherit; -} -a.list-group-item-success:hover, -button.list-group-item-success:hover, -a.list-group-item-success:focus, -button.list-group-item-success:focus { - color: #3c763d; - background-color: #d0e9c6; -} -a.list-group-item-success.active, -button.list-group-item-success.active, -a.list-group-item-success.active:hover, -button.list-group-item-success.active:hover, -a.list-group-item-success.active:focus, -button.list-group-item-success.active:focus { - color: #fff; - background-color: #3c763d; - border-color: #3c763d; -} -.list-group-item-info { - color: #31708f; - background-color: #d9edf7; -} -a.list-group-item-info, -button.list-group-item-info { - color: #31708f; -} -a.list-group-item-info .list-group-item-heading, -button.list-group-item-info .list-group-item-heading { - color: inherit; -} -a.list-group-item-info:hover, -button.list-group-item-info:hover, -a.list-group-item-info:focus, -button.list-group-item-info:focus { - color: #31708f; - background-color: #c4e3f3; -} -a.list-group-item-info.active, -button.list-group-item-info.active, -a.list-group-item-info.active:hover, -button.list-group-item-info.active:hover, -a.list-group-item-info.active:focus, -button.list-group-item-info.active:focus { - color: #fff; - background-color: #31708f; - border-color: #31708f; -} -.list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3; -} -a.list-group-item-warning, -button.list-group-item-warning { - color: #8a6d3b; -} -a.list-group-item-warning .list-group-item-heading, -button.list-group-item-warning .list-group-item-heading { - color: inherit; -} -a.list-group-item-warning:hover, -button.list-group-item-warning:hover, -a.list-group-item-warning:focus, -button.list-group-item-warning:focus { - color: #8a6d3b; - background-color: #faf2cc; -} -a.list-group-item-warning.active, -button.list-group-item-warning.active, -a.list-group-item-warning.active:hover, -button.list-group-item-warning.active:hover, -a.list-group-item-warning.active:focus, -button.list-group-item-warning.active:focus { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b; -} -.list-group-item-danger { - color: #a94442; - background-color: #f2dede; -} -a.list-group-item-danger, -button.list-group-item-danger { - color: #a94442; -} -a.list-group-item-danger .list-group-item-heading, -button.list-group-item-danger .list-group-item-heading { - color: inherit; -} -a.list-group-item-danger:hover, -button.list-group-item-danger:hover, -a.list-group-item-danger:focus, -button.list-group-item-danger:focus { - color: #a94442; - background-color: #ebcccc; -} -a.list-group-item-danger.active, -button.list-group-item-danger.active, -a.list-group-item-danger.active:hover, -button.list-group-item-danger.active:hover, -a.list-group-item-danger.active:focus, -button.list-group-item-danger.active:focus { - color: #fff; - background-color: #a94442; - border-color: #a94442; -} -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} - -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} -.well-lg { - padding: 24px; - border-radius: 6px; -} -.well-sm { - padding: 9px; - border-radius: 3px; -} diff --git a/extensions/database/module/styles/database-import.less b/extensions/database/module/styles/database-import.less deleted file mode 100644 index 04cae2dae..000000000 --- a/extensions/database/module/styles/database-import.less +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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. - */ -@import-less url("theme.less"); - -.database-container { -// margin-left: 200px; - // width: 50%; -// min-height: 50%; -} - -.cleared { - clear: both; -} - -.custom-restricted-width { - /* To limit the menu width to the content of the menu: */ - display: inline-block; - /* Or set the width explicitly: */ - /* width: 10em; */ -} - - -.scrollable { - height: 400px; - overflow: auto; -} - -.database-importing-wizard-header { - font-size: 1.3em; - background: @chrome_primary; - padding: @padding_tight; - } - -.database-importing-parsing-data-panel { - font-size: 1.1em; - position: absolute; - overflow: auto; - } - -.database-importing-progress-data-panel { - position: absolute; - overflow: auto; - font-size: 200%; - padding: 3em; - background: rgba(255, 255, 255, 0.7); - text-align: center; - } - -.database-importing-parsing-control-panel { - font-size: 1.3em; - position: absolute; - overflow: auto; - border-top: 5px solid @chrome_primary; - background: white; - padding: @padding_looser; - } - -.context-menu-text { - padding: 4px 4px 2px 2px; -} - - -.custom-restricted { - height: 300px; - width: 200px; - border: 1px solid #bce8f1; - border-radius: 4px; - margin-right:10px; - padding-right:10px; - margin-bottom:10px; -} -.custom-restricted-width { - /* To limit the menu width to the content of the menu: */ - display: inline-block; - /* Or set the width explicitly: */ - /* width: 10em; */ - margin-right:10px; - padding-right:10px; - margin-bottom:10px; -} -.no-resize { - resize: none; -} -.layout-div { - width : 100%; - -} -.layout-div .connection-div-layout { - min-width: 400px; -} -.new-connection-legend { - padding-left: 2px; - margin-left: 2px; - border-color: #bce8f1; -} - -.sql-editor-div { - margin-left:40px; - padding-left:20px; -} -.new-connection-div { - margin-left:40px; - padding-left:20px; -} -.new-connection-fieldset { - border: 1px solid gray; -} -.sc-list { - border-bottom: 1px dotted #bce8f1; -} - -.sc-context-more-vert:after { - content: ""; - display: inline-block; - background: url("../images/more-option-horiz-16.png") no-repeat top right; - // line-height: 1; - width: 16px; - height: 16px; - -webkit-font-smoothing: antialiased; - -} diff --git a/extensions/database/module/styles/jquery.contextMenu.css b/extensions/database/module/styles/jquery.contextMenu.css deleted file mode 100644 index 0253e6e1b..000000000 --- a/extensions/database/module/styles/jquery.contextMenu.css +++ /dev/null @@ -1,292 +0,0 @@ -@charset "UTF-8"; -/*! - * jQuery contextMenu - Plugin for simple contextMenu handling - * - * Version: v2.6.3 - * - * Authors: Björn Brala (SWIS.nl), Rodney Rehm, Addy Osmani (patches for FF) - * Web: http://swisnl.github.io/jQuery-contextMenu/ - * - * Copyright (c) 2011-2017 SWIS BV and contributors - * - * Licensed under - * MIT License http://www.opensource.org/licenses/mit-license - * - * Date: 2017-10-30T19:03:13.936Z - */ -@-webkit-keyframes cm-spin { - 0% { - -webkit-transform: translateY(-50%) rotate(0deg); - transform: translateY(-50%) rotate(0deg); - } - 100% { - -webkit-transform: translateY(-50%) rotate(359deg); - transform: translateY(-50%) rotate(359deg); - } -} -@-o-keyframes cm-spin { - 0% { - -webkit-transform: translateY(-50%) rotate(0deg); - -o-transform: translateY(-50%) rotate(0deg); - transform: translateY(-50%) rotate(0deg); - } - 100% { - -webkit-transform: translateY(-50%) rotate(359deg); - -o-transform: translateY(-50%) rotate(359deg); - transform: translateY(-50%) rotate(359deg); - } -} -@keyframes cm-spin { - 0% { - -webkit-transform: translateY(-50%) rotate(0deg); - -o-transform: translateY(-50%) rotate(0deg); - transform: translateY(-50%) rotate(0deg); - } - 100% { - -webkit-transform: translateY(-50%) rotate(359deg); - -o-transform: translateY(-50%) rotate(359deg); - transform: translateY(-50%) rotate(359deg); - } -} - -@font-face { - font-family: "context-menu-icons"; - font-style: normal; - font-weight: normal; - - src: url("font/context-menu-icons.eot?2wp27"); - src: url("font/context-menu-icons.eot?2wp27#iefix") format("embedded-opentype"), url("font/context-menu-icons.woff2?2wp27") format("woff2"), url("font/context-menu-icons.woff?2wp27") format("woff"), url("font/context-menu-icons.ttf?2wp27") format("truetype"); -} - -.context-menu-icon-add:before { - content: "\EA01"; -} - -.context-menu-icon-copy:before { - content: "\EA02"; -} - -.context-menu-icon-cut:before { - content: "\EA03"; -} - -.context-menu-icon-delete:before { - content: "\EA04"; -} - -.context-menu-icon-edit:before { - content: "\EA05"; -} - -.context-menu-icon-loading:before { - content: "\EA06"; -} - -.context-menu-icon-paste:before { - content: "\EA07"; -} - -.context-menu-icon-quit:before { - content: "\EA08"; -} - -.context-menu-icon::before { - position: absolute; - top: 50%; - left: 0; - width: 2em; - font-family: "context-menu-icons"; - font-size: 1em; - font-style: normal; - font-weight: normal; - line-height: 1; - color: #2980b9; - text-align: center; - -webkit-transform: translateY(-50%); - -ms-transform: translateY(-50%); - -o-transform: translateY(-50%); - transform: translateY(-50%); - - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.context-menu-icon.context-menu-hover:before { - color: #fff; -} - -.context-menu-icon.context-menu-disabled::before { - color: #bbb; -} - -.context-menu-icon.context-menu-icon-loading:before { - -webkit-animation: cm-spin 2s infinite; - -o-animation: cm-spin 2s infinite; - animation: cm-spin 2s infinite; -} - -.context-menu-icon.context-menu-icon--fa { - display: list-item; - font-family: inherit; -} -.context-menu-icon.context-menu-icon--fa::before { - position: absolute; - top: 50%; - left: 0; - width: 2em; - font-family: FontAwesome; - font-size: 1em; - font-style: normal; - font-weight: normal; - line-height: 1; - color: #2980b9; - text-align: center; - -webkit-transform: translateY(-50%); - -ms-transform: translateY(-50%); - -o-transform: translateY(-50%); - transform: translateY(-50%); - - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.context-menu-icon.context-menu-icon--fa.context-menu-hover:before { - color: #fff; -} -.context-menu-icon.context-menu-icon--fa.context-menu-disabled::before { - color: #bbb; -} - -.context-menu-list { - position: absolute; - display: inline-block; - min-width: 13em; - max-width: 26em; - padding: .25em 0; - margin: .3em; - font-family: inherit; - font-size: inherit; - list-style-type: none; - background: #fff; - border: 1px solid #bebebe; - border-radius: .2em; - -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, .5); - box-shadow: 0 2px 5px rgba(0, 0, 0, .5); -} - -.context-menu-item { - position: relative; - padding: .2em 2em; - color: #2f2f2f; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-color: #fff; - font: 15px "Helvetica Neue", Helvetica, Arial, sans-serif; -} - -.context-menu-separator { - padding: 0; - margin: .35em 0; - border-bottom: 1px solid #e6e6e6; -} - -.context-menu-item > label > input, -.context-menu-item > label > textarea { - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; -} - -.context-menu-item.context-menu-hover { - color: #fff; - cursor: pointer; - background-color: #2980b9; -} - -.context-menu-item.context-menu-disabled { - color: #bbb; - cursor: default; - background-color: #fff; -} - -.context-menu-input.context-menu-hover { - color: #2f2f2f; - cursor: default; -} - -.context-menu-submenu:after { - position: absolute; - top: 50%; - right: .5em; - z-index: 1; - width: 0; - height: 0; - content: ''; - border-color: transparent transparent transparent #2f2f2f; - border-style: solid; - border-width: .25em 0 .25em .25em; - -webkit-transform: translateY(-50%); - -ms-transform: translateY(-50%); - -o-transform: translateY(-50%); - transform: translateY(-50%); -} - -/** - * Inputs - */ -.context-menu-item.context-menu-input { - padding: .3em .6em; -} - -/* vertically align inside labels */ -.context-menu-input > label > * { - vertical-align: top; -} - -/* position checkboxes and radios as icons */ -.context-menu-input > label > input[type="checkbox"], -.context-menu-input > label > input[type="radio"] { - position: relative; - top: .12em; - margin-right: .4em; -} - -.context-menu-input > label { - margin: 0; -} - -.context-menu-input > label, -.context-menu-input > label > input[type="text"], -.context-menu-input > label > textarea, -.context-menu-input > label > select { - display: block; - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.context-menu-input > label > textarea { - height: 7em; -} - -.context-menu-item > .context-menu-list { - top: .3em; - /* re-positioned by js */ - right: -.3em; - display: none; -} - -.context-menu-item.context-menu-visible > .context-menu-list { - display: block; -} - -.context-menu-accesskey { - text-decoration: underline; -} -/*Custom to display icons*/ - - - diff --git a/extensions/database/module/styles/pure.css b/extensions/database/module/styles/pure.css deleted file mode 100644 index 6b9d53736..000000000 --- a/extensions/database/module/styles/pure.css +++ /dev/null @@ -1,1549 +0,0 @@ -/*! -Pure v1.0.0 -Copyright 2013 Yahoo! -Licensed under the BSD License. -https://github.com/yahoo/pure/blob/master/LICENSE.md -*/ -/*! -normalize.css v^3.0 | MIT License | git.io/normalize -Copyright (c) Nicolas Gallagher and Jonathan Neal -*/ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ - -/** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS and IE text size adjust after device orientation change, - * without disabling user zoom. - */ - -html { - font-family: sans-serif; /* 1 */ - -ms-text-size-adjust: 100%; /* 2 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} - -/** - * Remove default margin. - */ - -body { - margin: 0; -} - -/* HTML5 display definitions - ========================================================================== */ - -/** - * Correct `block` display not defined for any HTML5 element in IE 8/9. - * Correct `block` display not defined for `details` or `summary` in IE 10/11 - * and Firefox. - * Correct `block` display not defined for `main` in IE 11. - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} - -/** - * 1. Correct `inline-block` display not defined in IE 8/9. - * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. - */ - -audio, -canvas, -progress, -video { - display: inline-block; /* 1 */ - vertical-align: baseline; /* 2 */ -} - -/** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - */ - -audio:not([controls]) { - display: none; - height: 0; -} - -/** - * Address `[hidden]` styling not present in IE 8/9/10. - * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. - */ - -[hidden], -template { - display: none; -} - -/* Links - ========================================================================== */ - -/** - * Remove the gray background color from active links in IE 10. - */ - -a { - background-color: transparent; -} - -/** - * Improve readability of focused elements when they are also in an - * active/hover state. - */ - -a:active, -a:hover { - outline: 0; -} - -/* Text-level semantics - ========================================================================== */ - -/** - * Address styling not present in IE 8/9/10/11, Safari, and Chrome. - */ - -abbr[title] { - border-bottom: 1px dotted; -} - -/** - * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. - */ - -b, -strong { - font-weight: bold; -} - -/** - * Address styling not present in Safari and Chrome. - */ - -dfn { - font-style: italic; -} - -/** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari, and Chrome. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/** - * Address styling not present in IE 8/9. - */ - -mark { - background: #ff0; - color: #000; -} - -/** - * Address inconsistent and variable font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -/* Embedded content - ========================================================================== */ - -/** - * Remove border when inside `a` element in IE 8/9/10. - */ - -img { - border: 0; -} - -/** - * Correct overflow not hidden in IE 9/10/11. - */ - -svg:not(:root) { - overflow: hidden; -} - -/* Grouping content - ========================================================================== */ - -/** - * Address margin not present in IE 8/9 and Safari. - */ - -figure { - margin: 1em 40px; -} - -/** - * Address differences between Firefox and other browsers. - */ - -hr { - box-sizing: content-box; - height: 0; -} - -/** - * Contain overflow in all browsers. - */ - -pre { - overflow: auto; -} - -/** - * Address odd `em`-unit font size rendering in all browsers. - */ - -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} - -/* Forms - ========================================================================== */ - -/** - * Known limitation: by default, Chrome and Safari on OS X allow very limited - * styling of `select`, unless a `border` property is set. - */ - -/** - * 1. Correct color not being inherited. - * Known issue: affects color of disabled elements. - * 2. Correct font properties not being inherited. - * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. - */ - -button, -input, -optgroup, -select, -textarea { - color: inherit; /* 1 */ - font: inherit; /* 2 */ - margin: 0; /* 3 */ -} - -/** - * Address `overflow` set to `hidden` in IE 8/9/10/11. - */ - -button { - overflow: visible; -} - -/** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. - * Correct `select` style inheritance in Firefox. - */ - -button, -select { - text-transform: none; -} - -/** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. - */ - -button, -html input[type="button"], /* 1 */ -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; /* 2 */ - cursor: pointer; /* 3 */ -} - -/** - * Re-set default cursor for disabled elements. - */ - -button[disabled], -html input[disabled] { - cursor: default; -} - -/** - * Remove inner padding and border in Firefox 4+. - */ - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -/** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - */ - -input { - line-height: normal; -} - -/** - * It's recommended that you don't attempt to style these elements. - * Firefox's implementation doesn't respect box-sizing, padding, or width. - * - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. - */ - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Fix the cursor style for Chrome's increment/decrement buttons. For certain - * `font-size` values of the `input`, it causes the cursor style of the - * decrement button to change from `default` to `text`. - */ - -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -/** - * 1. Address `appearance` set to `searchfield` in Safari and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari and Chrome. - */ - -input[type="search"] { - -webkit-appearance: textfield; /* 1 */ - box-sizing: content-box; /* 2 */ -} - -/** - * Remove inner padding and search cancel button in Safari and Chrome on OS X. - * Safari (but not Chrome) clips the cancel button when the search input has - * padding (and `textfield` appearance). - */ - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * Define consistent border, margin, and padding. - */ - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -/** - * 1. Correct `color` not being inherited in IE 8/9/10/11. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. - */ - -legend { - border: 0; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Remove default vertical scrollbar in IE 8/9/10/11. - */ - -textarea { - overflow: auto; -} - -/** - * Don't inherit the `font-weight` (applied by a rule above). - * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. - */ - -optgroup { - font-weight: bold; -} - -/* Tables - ========================================================================== */ - -/** - * Remove most spacing between table cells. - */ - -table { - border-collapse: collapse; - border-spacing: 0; -} - -td, -th { - padding: 0; -} - -/*csslint important:false*/ - -/* ========================================================================== - Pure Base Extras - ========================================================================== */ - -/** - * Extra rules that Pure adds on top of Normalize.css - */ - -/** - * Always hide an element when it has the `hidden` HTML attribute. - */ - -.hidden, -[hidden] { - display: none !important; -} - -/** - * Add this class to an image to make it fit within it's fluid parent wrapper while maintaining - * aspect ratio. - */ -.pure-img { - max-width: 100%; - height: auto; - display: block; -} - -/*csslint regex-selectors:false, known-properties:false, duplicate-properties:false*/ - -.pure-g { - letter-spacing: -0.31em; /* Webkit: collapse white-space between units */ - *letter-spacing: normal; /* reset IE < 8 */ - *word-spacing: -0.43em; /* IE < 8: collapse white-space between units */ - text-rendering: optimizespeed; /* Webkit: fixes text-rendering: optimizeLegibility */ - - /* - Sets the font stack to fonts known to work properly with the above letter - and word spacings. See: https://github.com/yahoo/pure/issues/41/ - - The following font stack makes Pure Grids work on all known environments. - - * FreeSans: Ships with many Linux distros, including Ubuntu - - * Arimo: Ships with Chrome OS. Arimo has to be defined before Helvetica and - Arial to get picked up by the browser, even though neither is available - in Chrome OS. - - * Droid Sans: Ships with all versions of Android. - - * Helvetica, Arial, sans-serif: Common font stack on OS X and Windows. - */ - font-family: FreeSans, Arimo, "Droid Sans", Helvetica, Arial, sans-serif; - - /* Use flexbox when possible to avoid `letter-spacing` side-effects. */ - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-flex-flow: row wrap; - -ms-flex-flow: row wrap; - flex-flow: row wrap; - - /* Prevents distributing space between rows */ - -webkit-align-content: flex-start; - -ms-flex-line-pack: start; - align-content: flex-start; -} - -/* IE10 display: -ms-flexbox (and display: flex in IE 11) does not work inside a table; fall back to block and rely on font hack */ -@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { - table .pure-g { - display: block; - } -} - -/* Opera as of 12 on Windows needs word-spacing. - The ".opera-only" selector is used to prevent actual prefocus styling - and is not required in markup. -*/ -.opera-only :-o-prefocus, -.pure-g { - word-spacing: -0.43em; -} - -.pure-u { - display: inline-block; - *display: inline; /* IE < 8: fake inline-block */ - zoom: 1; - letter-spacing: normal; - word-spacing: normal; - vertical-align: top; - text-rendering: auto; -} - -/* -Resets the font family back to the OS/browser's default sans-serif font, -this the same font stack that Normalize.css sets for the `body`. -*/ -.pure-g [class *= "pure-u"] { - font-family: sans-serif; -} - -.pure-u-1, -.pure-u-1-1, -.pure-u-1-2, -.pure-u-1-3, -.pure-u-2-3, -.pure-u-1-4, -.pure-u-3-4, -.pure-u-1-5, -.pure-u-2-5, -.pure-u-3-5, -.pure-u-4-5, -.pure-u-5-5, -.pure-u-1-6, -.pure-u-5-6, -.pure-u-1-8, -.pure-u-3-8, -.pure-u-5-8, -.pure-u-7-8, -.pure-u-1-12, -.pure-u-5-12, -.pure-u-7-12, -.pure-u-11-12, -.pure-u-1-24, -.pure-u-2-24, -.pure-u-3-24, -.pure-u-4-24, -.pure-u-5-24, -.pure-u-6-24, -.pure-u-7-24, -.pure-u-8-24, -.pure-u-9-24, -.pure-u-10-24, -.pure-u-11-24, -.pure-u-12-24, -.pure-u-13-24, -.pure-u-14-24, -.pure-u-15-24, -.pure-u-16-24, -.pure-u-17-24, -.pure-u-18-24, -.pure-u-19-24, -.pure-u-20-24, -.pure-u-21-24, -.pure-u-22-24, -.pure-u-23-24, -.pure-u-24-24 { - display: inline-block; - *display: inline; - zoom: 1; - letter-spacing: normal; - word-spacing: normal; - vertical-align: top; - text-rendering: auto; -} - -.pure-u-1-24 { - width: 4.1667%; - *width: 4.1357%; -} - -.pure-u-1-12, -.pure-u-2-24 { - width: 8.3333%; - *width: 8.3023%; -} - -.pure-u-1-8, -.pure-u-3-24 { - width: 12.5000%; - *width: 12.4690%; -} - -.pure-u-1-6, -.pure-u-4-24 { - width: 16.6667%; - *width: 16.6357%; -} - -.pure-u-1-5 { - width: 20%; - *width: 19.9690%; -} - -.pure-u-5-24 { - width: 20.8333%; - *width: 20.8023%; -} - -.pure-u-1-4, -.pure-u-6-24 { - width: 25%; - *width: 24.9690%; -} - -.pure-u-7-24 { - width: 29.1667%; - *width: 29.1357%; -} - -.pure-u-1-3, -.pure-u-8-24 { - width: 33.3333%; - *width: 33.3023%; -} - -.pure-u-3-8, -.pure-u-9-24 { - width: 37.5000%; - *width: 37.4690%; -} - -.pure-u-2-5 { - width: 40%; - *width: 39.9690%; -} - -.pure-u-5-12, -.pure-u-10-24 { - width: 41.6667%; - *width: 41.6357%; -} - -.pure-u-11-24 { - width: 45.8333%; - *width: 45.8023%; -} - -.pure-u-1-2, -.pure-u-12-24 { - width: 50%; - *width: 49.9690%; -} - -.pure-u-13-24 { - width: 54.1667%; - *width: 54.1357%; -} - -.pure-u-7-12, -.pure-u-14-24 { - width: 58.3333%; - *width: 58.3023%; -} - -.pure-u-3-5 { - width: 60%; - *width: 59.9690%; -} - -.pure-u-5-8, -.pure-u-15-24 { - width: 62.5000%; - *width: 62.4690%; -} - -.pure-u-2-3, -.pure-u-16-24 { - width: 66.6667%; - *width: 66.6357%; -} - -.pure-u-17-24 { - width: 70.8333%; - *width: 70.8023%; -} - -.pure-u-3-4, -.pure-u-18-24 { - width: 75%; - *width: 74.9690%; -} - -.pure-u-19-24 { - width: 79.1667%; - *width: 79.1357%; -} - -.pure-u-4-5 { - width: 80%; - *width: 79.9690%; -} - -.pure-u-5-6, -.pure-u-20-24 { - width: 83.3333%; - *width: 83.3023%; -} - -.pure-u-7-8, -.pure-u-21-24 { - width: 87.5000%; - *width: 87.4690%; -} - -.pure-u-11-12, -.pure-u-22-24 { - width: 91.6667%; - *width: 91.6357%; -} - -.pure-u-23-24 { - width: 95.8333%; - *width: 95.8023%; -} - -.pure-u-1, -.pure-u-1-1, -.pure-u-5-5, -.pure-u-24-24 { - width: 100%; -} -.pure-button { - /* Structure */ - display: inline-block; - zoom: 1; - line-height: normal; - white-space: nowrap; - vertical-align: middle; - text-align: center; - cursor: pointer; - -webkit-user-drag: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - box-sizing: border-box; -} - -/* Firefox: Get rid of the inner focus border */ -.pure-button::-moz-focus-inner { - padding: 0; - border: 0; -} - -/* Inherit .pure-g styles */ -.pure-button-group { - letter-spacing: -0.31em; /* Webkit: collapse white-space between units */ - *letter-spacing: normal; /* reset IE < 8 */ - *word-spacing: -0.43em; /* IE < 8: collapse white-space between units */ - text-rendering: optimizespeed; /* Webkit: fixes text-rendering: optimizeLegibility */ -} - -.opera-only :-o-prefocus, -.pure-button-group { - word-spacing: -0.43em; -} - -.pure-button-group .pure-button { - letter-spacing: normal; - word-spacing: normal; - vertical-align: top; - text-rendering: auto; -} - -/*csslint outline-none:false*/ - -.pure-button { - font-family: inherit; - font-size: 100%; - padding: 0.5em 1em; - color: #444; /* rgba not supported (IE 8) */ - color: rgba(0, 0, 0, 0.80); /* rgba supported */ - border: 1px solid #999; /*IE 6/7/8*/ - border: none rgba(0, 0, 0, 0); /*IE9 + everything else*/ - background-color: #E6E6E6; - text-decoration: none; - border-radius: 2px; -} - -.pure-button-hover, -.pure-button:hover, -.pure-button:focus { - /* csslint ignore:start */ - filter: alpha(opacity=90); - /* csslint ignore:end */ - background-image: -webkit-linear-gradient(transparent, rgba(0,0,0, 0.05) 40%, rgba(0,0,0, 0.10)); - background-image: linear-gradient(transparent, rgba(0,0,0, 0.05) 40%, rgba(0,0,0, 0.10)); -} -.pure-button:focus { - outline: 0; -} -.pure-button-active, -.pure-button:active { - box-shadow: 0 0 0 1px rgba(0,0,0, 0.15) inset, 0 0 6px rgba(0,0,0, 0.20) inset; - border-color: #000\9; -} - -.pure-button[disabled], -.pure-button-disabled, -.pure-button-disabled:hover, -.pure-button-disabled:focus, -.pure-button-disabled:active { - border: none; - background-image: none; - /* csslint ignore:start */ - filter: alpha(opacity=40); - /* csslint ignore:end */ - opacity: 0.40; - cursor: not-allowed; - box-shadow: none; - pointer-events: none; -} - -.pure-button-hidden { - display: none; -} - -.pure-button-primary, -.pure-button-selected, -a.pure-button-primary, -a.pure-button-selected { - background-color: rgb(0, 120, 231); - color: #fff; -} - -/* Button Groups */ -.pure-button-group .pure-button { - margin: 0; - border-radius: 0; - border-right: 1px solid #111; /* fallback color for rgba() for IE7/8 */ - border-right: 1px solid rgba(0, 0, 0, 0.2); - -} - -.pure-button-group .pure-button:first-child { - border-top-left-radius: 2px; - border-bottom-left-radius: 2px; -} -.pure-button-group .pure-button:last-child { - border-top-right-radius: 2px; - border-bottom-right-radius: 2px; - border-right: none; -} - -/*csslint box-model:false*/ -/* -Box-model set to false because we're setting a height on select elements, which -also have border and padding. This is done because some browsers don't render -the padding. We explicitly set the box-model for select elements to border-box, -so we can ignore the csslint warning. -*/ - -.pure-form input[type="text"], -.pure-form input[type="password"], -.pure-form input[type="email"], -.pure-form input[type="url"], -.pure-form input[type="date"], -.pure-form input[type="month"], -.pure-form input[type="time"], -.pure-form input[type="datetime"], -.pure-form input[type="datetime-local"], -.pure-form input[type="week"], -.pure-form input[type="number"], -.pure-form input[type="search"], -.pure-form input[type="tel"], -.pure-form input[type="color"], -.pure-form select, -.pure-form textarea { - padding: 0.5em 0.6em; - display: inline-block; - border: 1px solid #ccc; - box-shadow: inset 0 1px 3px #ddd; - border-radius: 4px; - vertical-align: middle; - box-sizing: border-box; -} - -/* -Need to separate out the :not() selector from the rest of the CSS 2.1 selectors -since IE8 won't execute CSS that contains a CSS3 selector. -*/ -.pure-form input:not([type]) { - padding: 0.5em 0.6em; - display: inline-block; - border: 1px solid #ccc; - box-shadow: inset 0 1px 3px #ddd; - border-radius: 4px; - box-sizing: border-box; -} - - -/* Chrome (as of v.32/34 on OS X) needs additional room for color to display. */ -/* May be able to remove this tweak as color inputs become more standardized across browsers. */ -.pure-form input[type="color"] { - padding: 0.2em 0.5em; -} - - -.pure-form input[type="text"]:focus, -.pure-form input[type="password"]:focus, -.pure-form input[type="email"]:focus, -.pure-form input[type="url"]:focus, -.pure-form input[type="date"]:focus, -.pure-form input[type="month"]:focus, -.pure-form input[type="time"]:focus, -.pure-form input[type="datetime"]:focus, -.pure-form input[type="datetime-local"]:focus, -.pure-form input[type="week"]:focus, -.pure-form input[type="number"]:focus, -.pure-form input[type="search"]:focus, -.pure-form input[type="tel"]:focus, -.pure-form input[type="color"]:focus, -.pure-form select:focus, -.pure-form textarea:focus { - outline: 0; - border-color: #129FEA; -} - -/* -Need to separate out the :not() selector from the rest of the CSS 2.1 selectors -since IE8 won't execute CSS that contains a CSS3 selector. -*/ -.pure-form input:not([type]):focus { - outline: 0; - border-color: #129FEA; -} - -.pure-form input[type="file"]:focus, -.pure-form input[type="radio"]:focus, -.pure-form input[type="checkbox"]:focus { - outline: thin solid #129FEA; - outline: 1px auto #129FEA; -} -.pure-form .pure-checkbox, -.pure-form .pure-radio { - margin: 0.5em 0; - display: block; -} - -.pure-form input[type="text"][disabled], -.pure-form input[type="password"][disabled], -.pure-form input[type="email"][disabled], -.pure-form input[type="url"][disabled], -.pure-form input[type="date"][disabled], -.pure-form input[type="month"][disabled], -.pure-form input[type="time"][disabled], -.pure-form input[type="datetime"][disabled], -.pure-form input[type="datetime-local"][disabled], -.pure-form input[type="week"][disabled], -.pure-form input[type="number"][disabled], -.pure-form input[type="search"][disabled], -.pure-form input[type="tel"][disabled], -.pure-form input[type="color"][disabled], -.pure-form select[disabled], -.pure-form textarea[disabled] { - cursor: not-allowed; - background-color: #eaeded; - color: #cad2d3; -} - -/* -Need to separate out the :not() selector from the rest of the CSS 2.1 selectors -since IE8 won't execute CSS that contains a CSS3 selector. -*/ -.pure-form input:not([type])[disabled] { - cursor: not-allowed; - background-color: #eaeded; - color: #cad2d3; -} -.pure-form input[readonly], -.pure-form select[readonly], -.pure-form textarea[readonly] { - background-color: #eee; /* menu hover bg color */ - color: #777; /* menu text color */ - border-color: #ccc; -} - -.pure-form input:focus:invalid, -.pure-form textarea:focus:invalid, -.pure-form select:focus:invalid { - color: #b94a48; - border-color: #e9322d; -} -.pure-form input[type="file"]:focus:invalid:focus, -.pure-form input[type="radio"]:focus:invalid:focus, -.pure-form input[type="checkbox"]:focus:invalid:focus { - outline-color: #e9322d; -} -.pure-form select { - /* Normalizes the height; padding is not sufficient. */ - height: 2.25em; - border: 1px solid #ccc; - background-color: white; -} -.pure-form select[multiple] { - height: auto; -} -.pure-form label { - margin: 0.5em 0 0.2em; -} -.pure-form fieldset { - margin: 0; - padding: 0.35em 0 0.75em; - border: 0; -} -.pure-form legend { - display: block; - width: 50%; - padding: 0.3em 0; - margin-bottom: 0.3em; - margin-left: 5px; - color: #333; - /* border-bottom: 1px solid #e5e5e5; */ - border-bottom: 1px solid #bce8f1; -} - -.pure-form-stacked input[type="text"], -.pure-form-stacked input[type="password"], -.pure-form-stacked input[type="email"], -.pure-form-stacked input[type="url"], -.pure-form-stacked input[type="date"], -.pure-form-stacked input[type="month"], -.pure-form-stacked input[type="time"], -.pure-form-stacked input[type="datetime"], -.pure-form-stacked input[type="datetime-local"], -.pure-form-stacked input[type="week"], -.pure-form-stacked input[type="number"], -.pure-form-stacked input[type="search"], -.pure-form-stacked input[type="tel"], -.pure-form-stacked input[type="color"], -.pure-form-stacked input[type="file"], -.pure-form-stacked select, -.pure-form-stacked label, -.pure-form-stacked textarea { - display: block; - margin: 0.25em 0; -} - -/* -Need to separate out the :not() selector from the rest of the CSS 2.1 selectors -since IE8 won't execute CSS that contains a CSS3 selector. -*/ -.pure-form-stacked input:not([type]) { - display: block; - margin: 0.25em 0; -} -.pure-form-aligned input, -.pure-form-aligned textarea, -.pure-form-aligned select, -/* NOTE: pure-help-inline is deprecated. Use .pure-form-message-inline instead. */ -.pure-form-aligned .pure-help-inline, -.pure-form-message-inline { - display: inline-block; - *display: inline; - *zoom: 1; - vertical-align: middle; -} -.pure-form-aligned textarea { - vertical-align: top; -} - -/* Aligned Forms */ -.pure-form-aligned .pure-control-group { - margin-bottom: 0.5em; -} -.pure-form-aligned .pure-control-group label { - text-align: right; - display: inline-block; - vertical-align: middle; - width: 10em; - margin: 0 1em 0 0; -} -.pure-form-aligned .pure-controls { - margin: 1.5em 0 0 11em; -} - -/* Rounded Inputs */ -.pure-form input.pure-input-rounded, -.pure-form .pure-input-rounded { - border-radius: 2em; - padding: 0.5em 1em; -} - -/* Grouped Inputs */ -.pure-form .pure-group fieldset { - margin-bottom: 10px; -} -.pure-form .pure-group input, -.pure-form .pure-group textarea { - display: block; - padding: 10px; - margin: 0 0 -1px; - border-radius: 0; - position: relative; - top: -1px; -} -.pure-form .pure-group input:focus, -.pure-form .pure-group textarea:focus { - z-index: 3; -} -.pure-form .pure-group input:first-child, -.pure-form .pure-group textarea:first-child { - top: 1px; - border-radius: 4px 4px 0 0; - margin: 0; -} -.pure-form .pure-group input:first-child:last-child, -.pure-form .pure-group textarea:first-child:last-child { - top: 1px; - border-radius: 4px; - margin: 0; -} -.pure-form .pure-group input:last-child, -.pure-form .pure-group textarea:last-child { - top: -2px; - border-radius: 0 0 4px 4px; - margin: 0; -} -.pure-form .pure-group button { - margin: 0.35em 0; -} - -.pure-form .pure-input-1 { - width: 100%; -} -.pure-form .pure-input-3-4 { - width: 75%; -} -.pure-form .pure-input-2-3 { - width: 66%; -} -.pure-form .pure-input-1-2 { - width: 50%; -} -.pure-form .pure-input-1-3 { - width: 33%; -} -.pure-form .pure-input-1-4 { - width: 25%; -} - -/* Inline help for forms */ -/* NOTE: pure-help-inline is deprecated. Use .pure-form-message-inline instead. */ -.pure-form .pure-help-inline, -.pure-form-message-inline { - display: inline-block; - padding-left: 0.3em; - color: #666; - vertical-align: middle; - font-size: 0.875em; -} - -/* Block help for forms */ -.pure-form-message { - display: block; - color: #666; - font-size: 0.875em; -} - -@media only screen and (max-width : 480px) { - .pure-form button[type="submit"] { - margin: 0.7em 0 0; - } - - .pure-form input:not([type]), - .pure-form input[type="text"], - .pure-form input[type="password"], - .pure-form input[type="email"], - .pure-form input[type="url"], - .pure-form input[type="date"], - .pure-form input[type="month"], - .pure-form input[type="time"], - .pure-form input[type="datetime"], - .pure-form input[type="datetime-local"], - .pure-form input[type="week"], - .pure-form input[type="number"], - .pure-form input[type="search"], - .pure-form input[type="tel"], - .pure-form input[type="color"], - .pure-form label { - margin-bottom: 0.3em; - display: block; - } - - .pure-group input:not([type]), - .pure-group input[type="text"], - .pure-group input[type="password"], - .pure-group input[type="email"], - .pure-group input[type="url"], - .pure-group input[type="date"], - .pure-group input[type="month"], - .pure-group input[type="time"], - .pure-group input[type="datetime"], - .pure-group input[type="datetime-local"], - .pure-group input[type="week"], - .pure-group input[type="number"], - .pure-group input[type="search"], - .pure-group input[type="tel"], - .pure-group input[type="color"] { - margin-bottom: 0; - } - - .pure-form-aligned .pure-control-group label { - margin-bottom: 0.3em; - text-align: left; - display: block; - width: 100%; - } - - .pure-form-aligned .pure-controls { - margin: 1.5em 0 0 0; - } - - /* NOTE: pure-help-inline is deprecated. Use .pure-form-message-inline instead. */ - .pure-form .pure-help-inline, - .pure-form-message-inline, - .pure-form-message { - display: block; - font-size: 0.75em; - /* Increased bottom padding to make it group with its related input element. */ - padding: 0.2em 0 0.8em; - } -} - -/*csslint adjoining-classes: false, box-model:false*/ -.pure-menu { - box-sizing: border-box; -} - -.pure-menu-fixed { - position: fixed; - left: 0; - top: 0; - z-index: 3; -} - -.pure-menu-list, -.pure-menu-item { - position: relative; -} - -.pure-menu-list { - list-style: none; - margin: 0; - padding: 0; -} - -.pure-menu-item { - padding: 0; - margin: 0; - height: 100%; -} - -.pure-menu-link, -.pure-menu-heading { - display: block; - text-decoration: none; - white-space: nowrap; -} - -/* HORIZONTAL MENU */ -.pure-menu-horizontal { - width: 100%; - white-space: nowrap; -} - -.pure-menu-horizontal .pure-menu-list { - display: inline-block; -} - -/* Initial menus should be inline-block so that they are horizontal */ -.pure-menu-horizontal .pure-menu-item, -.pure-menu-horizontal .pure-menu-heading, -.pure-menu-horizontal .pure-menu-separator { - display: inline-block; - *display: inline; - zoom: 1; - vertical-align: middle; -} - -/* Submenus should still be display: block; */ -.pure-menu-item .pure-menu-item { - display: block; -} - -.pure-menu-children { - display: none; - position: absolute; - left: 100%; - top: 0; - margin: 0; - padding: 0; - z-index: 3; -} - -.pure-menu-horizontal .pure-menu-children { - left: 0; - top: auto; - width: inherit; -} - -.pure-menu-allow-hover:hover > .pure-menu-children, -.pure-menu-active > .pure-menu-children { - display: block; - position: absolute; -} - -/* Vertical Menus - show the dropdown arrow */ -.pure-menu-has-children > .pure-menu-link:after { - padding-left: 0.5em; - content: "\25B8"; - font-size: small; -} - -/* Horizontal Menus - show the dropdown arrow */ -.pure-menu-horizontal .pure-menu-has-children > .pure-menu-link:after { - content: "\25BE"; -} - -/* scrollable menus */ -.pure-menu-scrollable { - overflow-y: scroll; - overflow-x: scroll; -} - -.pure-menu-scrollable .pure-menu-list { - display: block; -} - -.pure-menu-horizontal.pure-menu-scrollable .pure-menu-list { - display: inline-block; -} - -.pure-menu-horizontal.pure-menu-scrollable { - white-space: nowrap; - overflow-y: hidden; - overflow-x: auto; - -ms-overflow-style: none; - -webkit-overflow-scrolling: touch; - /* a little extra padding for this style to allow for scrollbars */ - padding: .5em 0; -} - -.pure-menu-horizontal.pure-menu-scrollable::-webkit-scrollbar { - display: none; -} - -/* misc default styling */ - -.pure-menu-separator, -.pure-menu-horizontal .pure-menu-children .pure-menu-separator { - background-color: #ccc; - height: 1px; - margin: .3em 0; -} - -.pure-menu-horizontal .pure-menu-separator { - width: 1px; - height: 1.3em; - margin: 0 .3em ; -} - -/* Need to reset the separator since submenu is vertical */ -.pure-menu-horizontal .pure-menu-children .pure-menu-separator { - display: block; - width: auto; -} - -.pure-menu-heading { - text-transform: uppercase; - color: #565d64; -} - -.pure-menu-link { - /* color: #777; */ -} - -.pure-menu-children { - background-color: #fff; -} - -.pure-menu-link, -.pure-menu-disabled, -.pure-menu-heading { - padding: .5em 1em; -} - -.pure-menu-disabled { - opacity: .5; -} - -.pure-menu-disabled .pure-menu-link:hover { - background-color: transparent; -} - -.pure-menu-active > .pure-menu-link, -.pure-menu-link:hover, -.pure-menu-link:focus { - background-color: #eee; -} - -.pure-menu-selected .pure-menu-link, -.pure-menu-selected .pure-menu-link:visited { - color: #000; -} - -.pure-table { - /* Remove spacing between table cells (from Normalize.css) */ - border-collapse: collapse; - border-spacing: 0; - empty-cells: show; - border: 1px solid #cbcbcb; -} - -.pure-table caption { - color: #000; - font: italic 85%/1 arial, sans-serif; - padding: 1em 0; - text-align: center; -} - -.pure-table td, -.pure-table th { - border-left: 1px solid #cbcbcb;/* inner column border */ - border-width: 0 0 0 1px; - font-size: inherit; - margin: 0; - overflow: visible; /*to make ths where the title is really long work*/ - padding: 0.5em 1em; /* cell padding */ -} - -/* Consider removing this next declaration block, as it causes problems when -there's a rowspan on the first cell. Case added to the tests. issue#432 */ -.pure-table td:first-child, -.pure-table th:first-child { - border-left-width: 0; -} - -.pure-table thead { - background-color: #e0e0e0; - color: #000; - text-align: left; - vertical-align: bottom; -} - -/* -striping: - even - #fff (white) - odd - #f2f2f2 (light gray) -*/ -.pure-table td { - background-color: transparent; -} -.pure-table-odd td { - background-color: #f2f2f2; -} - -/* nth-child selector for modern browsers */ -.pure-table-striped tr:nth-child(2n-1) td { - background-color: #f2f2f2; -} - -/* BORDERED TABLES */ -.pure-table-bordered td { - border-bottom: 1px solid #cbcbcb; -} -.pure-table-bordered tbody > tr:last-child > td { - border-bottom-width: 0; -} - - -/* HORIZONTAL BORDERED TABLES */ - -.pure-table-horizontal td, -.pure-table-horizontal th { - border-width: 0 0 1px 0; - border-bottom: 1px solid #cbcbcb; -} -.pure-table-horizontal tbody > tr:last-child > td { - border-bottom-width: 0; -} - - -/* - * -- HELPER STYLES -- - * Over-riding some of the .pure-button styles to make my buttons look unique - */ -.button-success, -.button-error, -.button-warning, -.button-secondary { - color: white; - border-radius: 4px; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); -} - -.button-success { - background: rgb(28, 184, 65); /* this is a green */ -} - -.button-error { - background: rgb(202, 60, 60); /* this is a maroon */ -} - -.button-warning { - background: rgb(223, 117, 20); /* this is an orange */ -} - -.button-secondary { - background: rgb(66, 184, 221); /* this is a light blue */ -} - - -.custom-restricted { - height: 160px; - width: 150px; - border: 1px solid gray; - border-radius: 4px; -} - diff --git a/extensions/database/module/styles/theme.less b/extensions/database/module/styles/theme.less deleted file mode 100644 index 443a411bc..000000000 --- a/extensions/database/module/styles/theme.less +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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. - */ - -@import-less url("../../../../main/webapp/modules/core/styles/theme.less"); diff --git a/extensions/database/src/com/google/refine/extension/database/DBQueryResultImportReader.java b/extensions/database/src/com/google/refine/extension/database/DBQueryResultImportReader.java deleted file mode 100644 index 0da3fa055..000000000 --- a/extensions/database/src/com/google/refine/extension/database/DBQueryResultImportReader.java +++ /dev/null @@ -1,287 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.refine.extension.database.model.DatabaseColumn; -import com.google.refine.extension.database.model.DatabaseQueryInfo; -import com.google.refine.extension.database.model.DatabaseRow; -import com.google.refine.importers.TabularImportingParserBase.TableDataReader; -import com.google.refine.importing.ImportingJob; - - -public class DBQueryResultImportReader implements TableDataReader { - - private static final Logger logger = LoggerFactory.getLogger("DBQueryResultImportReader"); - - private final ImportingJob job; - private final String querySource; - private List dbColumns; - private final int batchSize; - - private int nextRow = 0; // 0-based - private int batchRowStart = 0; // 0-based - private boolean end = false; - private List> rowsOfCells = null; - private boolean usedHeaders = false; - private DatabaseService databaseService; - private DatabaseQueryInfo dbQueryInfo; - private int processedRows = 0; - private static int progress = 0; - - - public DBQueryResultImportReader( - ImportingJob job, - DatabaseService databaseService, - String querySource, - List columns, - DatabaseQueryInfo dbQueryInfo, - int batchSize) { - - this.job = job; - this.querySource = querySource; - this.batchSize = batchSize; - this.dbColumns = columns; - this.databaseService = databaseService; - this.dbQueryInfo = dbQueryInfo; - if(logger.isDebugEnabled()) { - logger.debug("batchSize:" + batchSize); - } - - } - - @Override - public List getNextRowOfCells() throws IOException { - - try { - - if (!usedHeaders) { - List row = new ArrayList(dbColumns.size()); - for (DatabaseColumn cd : dbColumns) { - row.add(cd.getName()); - } - usedHeaders = true; - //logger.info("Exit::getNextRowOfCells return header::row:" + row); - return row; - } - - if (rowsOfCells == null || (nextRow >= batchRowStart + rowsOfCells.size() && !end)) { - int newBatchRowStart = batchRowStart + (rowsOfCells == null ? 0 : rowsOfCells.size()); - rowsOfCells = getRowsOfCells(newBatchRowStart); - processedRows = processedRows + rowsOfCells.size(); - batchRowStart = newBatchRowStart; - setProgress(job, querySource, -1 /* batchRowStart * 100 / totalRows */); - } - - if (rowsOfCells != null && nextRow - batchRowStart < rowsOfCells.size()) { - List result = rowsOfCells.get(nextRow++ - batchRowStart); - if(nextRow >= batchSize) { - rowsOfCells = getRowsOfCells(processedRows); - processedRows = processedRows + rowsOfCells.size(); - - if(logger.isDebugEnabled()) { - logger.debug("[[ Returning last row in batch:nextRow::{}, processedRows:{} ]]", nextRow, processedRows); - } - - nextRow = 0; - if(processedRows % 100 == 0) { - setProgress(job, querySource, progress++); - } - if(processedRows % 10000 == 0) { - if(logger.isDebugEnabled()) { - logger.debug("[[ {} rows processed... ]]",processedRows); - } - } - } - return result; - } else { - if(logger.isDebugEnabled()) { - logger.debug("[[processedRows:{} ]]", processedRows); - } - return null; - } - - - }catch(DatabaseServiceException e) { - logger.error("DatabaseServiceException::{}", e); - throw new IOException(e); - - } - - - } - - /** - * @param startRow - * @return - * @throws IOException - * @throws DatabaseServiceException - */ - private List> getRowsOfCells(int startRow) throws IOException, DatabaseServiceException { - //logger.info("Entry getRowsOfCells::startRow:" + startRow); - - List> rowsOfCells = new ArrayList>(batchSize); - - String query = databaseService.buildLimitQuery(batchSize, startRow, dbQueryInfo.getQuery()); - //logger.info("batchSize::" + batchSize + " startRow::" + startRow + " query::" + query ); - - List dbRows = databaseService.getRows(dbQueryInfo.getDbConfig(), query); - - if(dbRows != null && !dbRows.isEmpty() && dbRows.size() > 0) { - - for(DatabaseRow dbRow: dbRows) { - List row = dbRow.getValues(); - List rowOfCells = new ArrayList(row.size()); - - for (int j = 0; j < row.size() && j < dbColumns.size(); j++) { - - String text = row.get(j); - if (text == null || text.isEmpty()) { - rowOfCells.add(null); - }else { - DatabaseColumn col = dbColumns.get(j); - if(col.getType() == DatabaseColumnType.NUMBER) { - try { - rowOfCells.add(Long.parseLong(text)); - continue; - } catch (NumberFormatException e) {} - - }else if(col.getType() == DatabaseColumnType.DOUBLE || col.getType() == DatabaseColumnType.FLOAT ) { - try { - double d = Double.parseDouble(text); - if (!Double.isInfinite(d) && !Double.isNaN(d)) { - rowOfCells.add(d); - continue; - } - } catch (NumberFormatException e) {} - - } - - rowOfCells.add(text); - } - - } - - rowsOfCells.add(rowOfCells); - - } - - } - end = dbRows.size() < batchSize + 1; - //logger.info("Exit::getRowsOfCells::rowsOfCells:{}", rowsOfCells); - return rowsOfCells; - - } - - private static void setProgress(ImportingJob job, String querySource, int percent) { - job.setProgress(percent, "Reading " + querySource); - } - - public List getColumns() { - return dbColumns; - } - - - public void setColumns(List columns) { - this.dbColumns = columns; - } - - - public int getNextRow() { - return nextRow; - } - - - public void setNextRow(int nextRow) { - this.nextRow = nextRow; - } - - - public int getBatchRowStart() { - return batchRowStart; - } - - - public void setBatchRowStart(int batchRowStart) { - this.batchRowStart = batchRowStart; - } - - - public boolean isEnd() { - return end; - } - - - public void setEnd(boolean end) { - this.end = end; - } - - - public List> getRowsOfCells() { - return rowsOfCells; - } - - - public void setRowsOfCells(List> rowsOfCells) { - this.rowsOfCells = rowsOfCells; - } - - - public boolean isUsedHeaders() { - return usedHeaders; - } - - - public void setUsedHeaders(boolean usedHeaders) { - this.usedHeaders = usedHeaders; - } - - - public ImportingJob getJob() { - return job; - } - - - public String getQuerySource() { - return querySource; - } - - - public int getBatchSize() { - return batchSize; - } - - -} diff --git a/extensions/database/src/com/google/refine/extension/database/DBQueryResultPreviewReader.java b/extensions/database/src/com/google/refine/extension/database/DBQueryResultPreviewReader.java deleted file mode 100644 index 95f8a6cf7..000000000 --- a/extensions/database/src/com/google/refine/extension/database/DBQueryResultPreviewReader.java +++ /dev/null @@ -1,270 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.refine.extension.database.model.DatabaseColumn; -import com.google.refine.extension.database.model.DatabaseQueryInfo; -import com.google.refine.extension.database.model.DatabaseRow; -import com.google.refine.importers.TabularImportingParserBase.TableDataReader; -import com.google.refine.importing.ImportingJob; - - -public class DBQueryResultPreviewReader implements TableDataReader { - - private static final Logger logger = LoggerFactory.getLogger("DBQueryResultPreviewReader"); - - private final ImportingJob job; - private final String querySource; - private List dbColumns; - private final int batchSize; - - private int nextRow = 0; // 0-based - private int batchRowStart = 0; // 0-based - private boolean end = false; - private List> rowsOfCells = null; - private boolean usedHeaders = false; - private DatabaseService databaseService; - private DatabaseQueryInfo dbQueryInfo; - - - public DBQueryResultPreviewReader( - ImportingJob job, - DatabaseService databaseService, - String querySource, - List columns, - DatabaseQueryInfo dbQueryInfo, - int batchSize) { - - this.job = job; - this.querySource = querySource; - this.batchSize = batchSize; - this.dbColumns = columns; - this.databaseService = databaseService; - this.dbQueryInfo = dbQueryInfo; - logger.debug("DBQueryResultPreviewReader::batchSize:" + batchSize); - - } - - @Override - public List getNextRowOfCells() throws IOException { - - // logger.info("Entry::getNextRowOfCells"); - - try { - - if (!usedHeaders) { - List row = new ArrayList(dbColumns.size()); - for (DatabaseColumn cd : dbColumns) { - row.add(cd.getName()); - } - usedHeaders = true; - // logger.debug("Exit::getNextRowOfCells return header::row:" + row); - return row; - } - - if (rowsOfCells == null || (nextRow >= batchRowStart + rowsOfCells.size() && !end)) { - int newBatchRowStart = batchRowStart + (rowsOfCells == null ? 0 : rowsOfCells.size()); - rowsOfCells = getRowsOfCells(newBatchRowStart); - batchRowStart = newBatchRowStart; - setProgress(job, querySource, -1 /* batchRowStart * 100 / totalRows */); - // logger.info("getNextRowOfCells:: rowsOfCellsIsNull::rowsOfCells size:" + rowsOfCells.size() + ":batchRowStart:" + batchRowStart + " ::nextRow:" + nextRow); - } - - if (rowsOfCells != null && nextRow - batchRowStart < rowsOfCells.size()) { - //logger.info("Exit::getNextRowOfCells :rowsOfCellsNotNull::rowsOfCells size:" + rowsOfCells.size() + ":batchRowStart:" + batchRowStart + " ::nextRow:" + nextRow); - return rowsOfCells.get(nextRow++ - batchRowStart); - } else { - if(logger.isDebugEnabled()) { - logger.debug("nextRow:{}, batchRowStart:{}", nextRow, batchRowStart); - } - - return null; - } - - - }catch(DatabaseServiceException e) { - logger.error("DatabaseServiceException::preview:{}", e.getMessage()); - IOException ioEx = new IOException(e.getMessage(), e); - throw ioEx; - - } - - } - - /** - * - * @param startRow - * @return - * @throws IOException - * @throws DatabaseServiceException - */ - private List> getRowsOfCells(int startRow) throws IOException, DatabaseServiceException { - //logger.info("Entry getRowsOfCells::startRow:" + startRow); - - List> rowsOfCells = new ArrayList>(batchSize); - - String query = databaseService.buildLimitQuery(batchSize, startRow, dbQueryInfo.getQuery()); - if(logger.isDebugEnabled()) { - logger.debug("batchSize::" + batchSize + " startRow::" + startRow + " query::" + query ); - } - - List dbRows = databaseService.getRows(dbQueryInfo.getDbConfig(), query); - - if(dbRows != null && !dbRows.isEmpty() && dbRows.size() > 0) { - - for(DatabaseRow dbRow: dbRows) { - List row = dbRow.getValues(); - List rowOfCells = new ArrayList(row.size()); - - for (int j = 0; j < row.size() && j < dbColumns.size(); j++) { - - String text = row.get(j); - if (text == null || text.isEmpty()) { - rowOfCells.add(null); - }else { - DatabaseColumn col = dbColumns.get(j); - if(col.getType() == DatabaseColumnType.NUMBER) { - try { - rowOfCells.add(Long.parseLong(text)); - continue; - } catch (NumberFormatException e) {} - - }else if(col.getType() == DatabaseColumnType.DOUBLE || col.getType() == DatabaseColumnType.FLOAT ) { - try { - double d = Double.parseDouble(text); - if (!Double.isInfinite(d) && !Double.isNaN(d)) { - rowOfCells.add(d); - continue; - } - } catch (NumberFormatException e) {} - - } - - rowOfCells.add(text); - } - - } - rowsOfCells.add(rowOfCells); - - } - - } - end = dbRows.size() < batchSize + 1; - //logger.info("Exit::getRowsOfCells::rowsOfCells:{}", rowsOfCells); - return rowsOfCells; - - } - - private static void setProgress(ImportingJob job, String querySource, int percent) { - job.setProgress(percent, "Reading " + querySource); - } - - public List getColumns() { - return dbColumns; - } - - - public void setColumns(List columns) { - this.dbColumns = columns; - } - - - public int getNextRow() { - return nextRow; - } - - - public void setNextRow(int nextRow) { - this.nextRow = nextRow; - } - - - public int getBatchRowStart() { - return batchRowStart; - } - - - public void setBatchRowStart(int batchRowStart) { - this.batchRowStart = batchRowStart; - } - - - public boolean isEnd() { - return end; - } - - - public void setEnd(boolean end) { - this.end = end; - } - - - public List> getRowsOfCells() { - return rowsOfCells; - } - - - public void setRowsOfCells(List> rowsOfCells) { - this.rowsOfCells = rowsOfCells; - } - - - public boolean isUsedHeaders() { - return usedHeaders; - } - - - public void setUsedHeaders(boolean usedHeaders) { - this.usedHeaders = usedHeaders; - } - - - public ImportingJob getJob() { - return job; - } - - - public String getQuerySource() { - return querySource; - } - - - public int getBatchSize() { - return batchSize; - } - - -} diff --git a/extensions/database/src/com/google/refine/extension/database/DatabaseColumnType.java b/extensions/database/src/com/google/refine/extension/database/DatabaseColumnType.java deleted file mode 100644 index 79a0c8f3a..000000000 --- a/extensions/database/src/com/google/refine/extension/database/DatabaseColumnType.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database; - - -public enum DatabaseColumnType { - - STRING, - NUMBER, - DATETIME, - LOCATION, - BOOLEAN, - DATE, - DOUBLE, - FLOAT - -} diff --git a/extensions/database/src/com/google/refine/extension/database/DatabaseConfiguration.java b/extensions/database/src/com/google/refine/extension/database/DatabaseConfiguration.java deleted file mode 100644 index 85c4cd6e8..000000000 --- a/extensions/database/src/com/google/refine/extension/database/DatabaseConfiguration.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database; - - -public class DatabaseConfiguration { - - private String connectionName; - private String databaseType; - private String databaseHost; - private int databasePort; - private String databaseUser; - private String databasePassword; - private String databaseName; - private String databaseSchema; - - //optional parameters - private boolean useSSL; - - - public String getConnectionName() { - return connectionName; - } - - public void setConnectionName(String connectionName) { - this.connectionName = connectionName; - } - - public String getDatabaseType() { - return databaseType; - } - - public void setDatabaseType(String databaseType) { - this.databaseType = databaseType; - } - - public String getDatabaseHost() { - return databaseHost; - } - - public void setDatabaseHost(String databaseServer) { - this.databaseHost = databaseServer; - } - - public int getDatabasePort() { - return databasePort; - } - - public void setDatabasePort(int databasePort) { - this.databasePort = databasePort; - } - - public String getDatabaseUser() { - return databaseUser; - } - - public void setDatabaseUser(String databaseUser) { - this.databaseUser = databaseUser; - } - - public String getDatabasePassword() { - return databasePassword; - } - - public void setDatabasePassword(String databasePassword) { - this.databasePassword = databasePassword; - } - - public String getDatabaseName() { - return databaseName; - } - - public void setDatabaseName(String initialDatabase) { - this.databaseName = initialDatabase; - } - - public String getDatabaseSchema() { - return databaseSchema; - } - - public void setDatabaseSchema(String initialSchema) { - this.databaseSchema = initialSchema; - } - - - - public boolean isUseSSL() { - return useSSL; - } - - public void setUseSSL(boolean useSSL) { - this.useSSL = useSSL; - } - - @Override - public String toString() { - return "DatabaseConfiguration [connectionName=" + connectionName + ", databaseType=" + databaseType - + ", databaseHost=" + databaseHost + ", databasePort=" + databasePort + ", databaseUser=" + databaseUser - + ", databaseName=" + databaseName + ", databaseSchema=" - + databaseSchema + ", useSSL=" + useSSL + "]"; - } - - - -} diff --git a/extensions/database/src/com/google/refine/extension/database/DatabaseImportController.java b/extensions/database/src/com/google/refine/extension/database/DatabaseImportController.java deleted file mode 100644 index 51cc2175e..000000000 --- a/extensions/database/src/com/google/refine/extension/database/DatabaseImportController.java +++ /dev/null @@ -1,493 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database; - -import java.io.IOException; -import java.io.Writer; -import java.util.LinkedList; -import java.util.List; -import java.util.Properties; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.json.JSONException; -import org.json.JSONObject; -import org.json.JSONWriter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.refine.ProjectManager; -import com.google.refine.ProjectMetadata; -import com.google.refine.RefineServlet; -import com.google.refine.commands.HttpUtilities; -import com.google.refine.extension.database.model.DatabaseColumn; -import com.google.refine.extension.database.model.DatabaseQueryInfo; -import com.google.refine.importers.TabularImportingParserBase; -import com.google.refine.importing.ImportingController; -import com.google.refine.importing.ImportingJob; -import com.google.refine.importing.ImportingManager; -import com.google.refine.model.Project; -import com.google.refine.util.JSONUtilities; -import com.google.refine.util.ParsingUtilities; - - -public class DatabaseImportController implements ImportingController { - - private static final Logger logger = LoggerFactory.getLogger("DatabaseImportController"); - protected RefineServlet servlet; - public static int DEFAULT_PREVIEW_LIMIT = 100; - public static String OPTIONS_KEY = "options"; - - @Override - public void init(RefineServlet servlet) { - this.servlet = servlet; - } - - @Override - public void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - HttpUtilities.respond(response, "error", "GET not implemented"); - } - - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - if(logger.isDebugEnabled()){ - logger.debug("doPost Query String::{}", request.getQueryString()); - } - response.setCharacterEncoding("UTF-8"); - Properties parameters = ParsingUtilities.parseUrlParameters(request); - - String subCommand = parameters.getProperty("subCommand"); - - if(logger.isDebugEnabled()){ - logger.info("doPost::subCommand::{}", subCommand); - } - - if ("initialize-parser-ui".equals(subCommand)) { - doInitializeParserUI(request, response, parameters); - } else if ("parse-preview".equals(subCommand)) { - try { - - doParsePreview(request, response, parameters); - - } catch (DatabaseServiceException e) { - logger.error("doPost::DatabaseServiceException::{}", e); - HttpUtilities.respond(response, "error", getDbServiceException(e)); - } - } else if ("create-project".equals(subCommand)) { - doCreateProject(request, response, parameters); - } else { - HttpUtilities.respond(response, "error", "No such sub command"); - } - - } - - private String getDbServiceException(Exception ex) { - String message = ""; - if(ex instanceof DatabaseServiceException) { - DatabaseServiceException dbEx = (DatabaseServiceException) ex; - if(dbEx.isSqlException()) { - message = message + dbEx.getSqlCode() + " " + dbEx.getSqlState(); - } - } - message = message + ex.getMessage(); - - return message; - } - - /** - * - * @param request - * @param response - * @param parameters - * @throws ServletException - * @throws IOException - */ - private void doInitializeParserUI(HttpServletRequest request, HttpServletResponse response, Properties parameters) - throws ServletException, IOException { - if(logger.isDebugEnabled()) { - logger.debug("::doInitializeParserUI::"); - } - - - JSONObject result = new JSONObject(); - JSONObject options = new JSONObject(); - JSONUtilities.safePut(result, "status", "ok"); - JSONUtilities.safePut(result, OPTIONS_KEY, options); - - JSONUtilities.safePut(options, "skipDataLines", 0); - JSONUtilities.safePut(options, "storeBlankRows", true); - JSONUtilities.safePut(options, "storeBlankCellsAsNulls", true); - if(logger.isDebugEnabled()) { - logger.debug("doInitializeParserUI:::{}", result.toString()); - } - - HttpUtilities.respond(response, result.toString()); - - } - - - /** - * doParsePreview - * @param request - * @param response - * @param parameters - * @throws ServletException - * @throws IOException - * @throws DatabaseServiceException - */ - private void doParsePreview( - HttpServletRequest request, HttpServletResponse response, Properties parameters) - throws ServletException, IOException, DatabaseServiceException { - if(logger.isDebugEnabled()) { - logger.debug("JobID::{}", parameters.getProperty("jobID")); - } - - - long jobID = Long.parseLong(parameters.getProperty("jobID")); - ImportingJob job = ImportingManager.getJob(jobID); - if (job == null) { - HttpUtilities.respond(response, "error", "No such import job"); - return; - } - - - DatabaseQueryInfo databaseQueryInfo = getQueryInfo(request); - - - if(databaseQueryInfo == null) { - HttpUtilities.respond(response, "error", "Invalid or missing Query Info"); - } - - job.updating = true; - try { - JSONObject optionObj = ParsingUtilities.evaluateJsonStringToObject( - request.getParameter("options")); - - List exceptions = new LinkedList(); - - job.prepareNewProject(); - - parsePreview( - databaseQueryInfo, - job.project, - job.metadata, - job, - DEFAULT_PREVIEW_LIMIT , - optionObj, - exceptions - ); -// String exStr = getExceptionString(exceptions); -// logger.info("exceptions::" + exStr); - - Writer w = response.getWriter(); - JSONWriter writer = new JSONWriter(w); - try { - writer.object(); - if (exceptions.size() == 0) { - job.project.update(); // update all internal models, indexes, caches, etc. - writer.key("status"); - writer.value("ok"); - } else { - writer.key("status"); - writer.value("error"); - writer.key("message"); - writer.value(getExceptionString(exceptions)); -// writer.array(); -// writeErrors(writer, exceptions); -// writer.endArray(); - } - writer.endObject(); - } catch (JSONException e) { - throw new ServletException(e); - } finally { - w.flush(); - w.close(); - } - - } catch (JSONException e) { - throw new ServletException(e); - } finally { - job.touch(); - job.updating = false; - } - } - - - - private String getExceptionString(List exceptions) { - String ex = ""; - for(Exception e: exceptions) { - ex = ex + e.getLocalizedMessage() + "\n"; - } - // TODO Auto-generated method stub - return ex; - } - - /** - * - * @param dbQueryInfo - * @param project - * @param metadata - * @param job - * @param limit - * @param options - * @param exceptions - * @throws DatabaseServiceException - */ - private static void parsePreview( - DatabaseQueryInfo dbQueryInfo, - Project project, - ProjectMetadata metadata, - final ImportingJob job, - int limit, - JSONObject options, - List exceptions) throws DatabaseServiceException{ - - - DatabaseService databaseService = DatabaseService.get(dbQueryInfo.getDbConfig().getDatabaseType()); - String querySource = getQuerySource(dbQueryInfo); - - List columns = databaseService.getColumns(dbQueryInfo.getDbConfig(), dbQueryInfo.getQuery()); - - - setProgress(job, querySource, -1); - - JSONUtilities.safePut(options, "ignoreLines", 0); // number of blank lines at the beginning to ignore - JSONUtilities.safePut(options, "headerLines", 1); // number of header lines - - - TabularImportingParserBase.readTable( - project, - metadata, - job, - new DBQueryResultPreviewReader(job, databaseService, querySource, columns, dbQueryInfo, 100), - querySource, - limit, - options, - exceptions - ); - - setProgress(job, querySource, 100); - - } - - - /** - * doCreateProject - * @param request - * @param response - * @param parameters - */ - private void doCreateProject(HttpServletRequest request, HttpServletResponse response, Properties parameters) - throws ServletException, IOException{ - if(logger.isDebugEnabled()) { - logger.debug("DatabaseImportController::doCreateProject:::{}", parameters.getProperty("jobID")); - } - - long jobID = Long.parseLong(parameters.getProperty("jobID")); - final ImportingJob job = ImportingManager.getJob(jobID); - if (job == null) { - HttpUtilities.respond(response, "error", "No such import job"); - return; - } - - final DatabaseQueryInfo databaseQueryInfo = getQueryInfo(request); - if(databaseQueryInfo == null) { - HttpUtilities.respond(response, "error", "Invalid or missing Query Info"); - } - - job.updating = true; - try { - final JSONObject optionObj = ParsingUtilities.evaluateJsonStringToObject( - request.getParameter("options")); - - final List exceptions = new LinkedList(); - - job.setState("creating-project"); - - final Project project = new Project(); - - new Thread() { - @Override - public void run() { - ProjectMetadata pm = new ProjectMetadata(); - pm.setName(JSONUtilities.getString(optionObj, "projectName", "Untitled")); - pm.setEncoding(JSONUtilities.getString(optionObj, "encoding", "UTF-8")); - - try { - parseCreate( - databaseQueryInfo, - project, - pm, - job, - -1, - optionObj, - exceptions - ); - } catch (DatabaseServiceException e) { - logger.error("DatabaseImportController::doCreateProject:::run{}", e); - // throw new RuntimeException("DatabaseServiceException::", e); - } - - if (!job.canceled) { - if (exceptions.size() > 0) { - job.setError(exceptions); - } else { - project.update(); // update all internal models, indexes, caches, etc. - ProjectManager.singleton.registerProject(project, pm); - job.setState("created-project"); - job.setProjectID(project.id); - // logger.info("DatabaseImportController::doCreateProject:::run::projectID :{}", project.id); - } - - job.touch(); - job.updating = false; - } - } - }.start(); - - HttpUtilities.respond(response, "ok", "done"); - } catch (JSONException e) { - throw new ServletException(e); - } - } - - - /** - * @param dbQueryInfo - * @param project - * @param metadata - * @param job - * @param limit - * @param options - * @param exceptions - * @throws DatabaseServiceException - */ - private static void parseCreate( - DatabaseQueryInfo dbQueryInfo, - Project project, - ProjectMetadata metadata, - final ImportingJob job, - int limit, - JSONObject options, - List exceptions) throws DatabaseServiceException{ - - - DatabaseService databaseService = DatabaseService.get(dbQueryInfo.getDbConfig().getDatabaseType()); - String querySource = getQuerySource(dbQueryInfo); - - List columns = databaseService.getColumns(dbQueryInfo.getDbConfig(), dbQueryInfo.getQuery()); - - setProgress(job, querySource, -1); - - JSONUtilities.safePut(options, "ignoreLines", 0); // number of blank lines at the beginning to ignore - JSONUtilities.safePut(options, "headerLines", 1); // number of header lines - - long startTime = System.currentTimeMillis() ; - - TabularImportingParserBase.readTable( - project, - metadata, - job, - new DBQueryResultImportReader(job, databaseService, querySource, columns, dbQueryInfo, getCreateBatchSize()), - querySource, - limit, - options, - exceptions - ); - - long endTime = System.currentTimeMillis() ; - if(logger.isDebugEnabled()) { - logger.debug("Execution Time: {}", endTime - startTime); - } - - setProgress(job, querySource, 100); - - } - - private static int getCreateBatchSize() { - String propBatchSize = DatabaseModuleImpl.getImportCreateBatchSize(); - int batchSize = 100; - if(propBatchSize != null && !propBatchSize.isEmpty()) { - try { - batchSize = Integer.parseInt(propBatchSize); - }catch(NumberFormatException nfe) { - - } - } - return batchSize; - } - - /** - * @param request - * @return - */ - private DatabaseQueryInfo getQueryInfo(HttpServletRequest request) { - DatabaseConfiguration jdbcConfig = new DatabaseConfiguration(); - jdbcConfig.setConnectionName(request.getParameter("connectionName")); - jdbcConfig.setDatabaseType(request.getParameter("databaseType")); - jdbcConfig.setDatabaseHost(request.getParameter("databaseServer")); - jdbcConfig.setDatabasePort(Integer.parseInt(request.getParameter("databasePort"))); - jdbcConfig.setDatabaseUser(request.getParameter("databaseUser")); - jdbcConfig.setDatabasePassword(request.getParameter("databasePassword")); - jdbcConfig.setDatabaseName(request.getParameter("initialDatabase")); - jdbcConfig.setDatabaseSchema(request.getParameter("initialSchema")); - - String query = request.getParameter("query"); - if(logger.isDebugEnabled()) { - logger.debug("jdbcConfig::{}, query::{}", jdbcConfig, query); - } - if (jdbcConfig.getDatabaseHost() == null || jdbcConfig.getDatabaseName() == null - || jdbcConfig.getDatabasePassword() == null || jdbcConfig.getDatabaseType() == null - || jdbcConfig.getDatabaseUser() == null || query == null) { - if(logger.isDebugEnabled()) { - logger.debug("Missing Database Configuration::{}", jdbcConfig); - } - return null; - } - - return new DatabaseQueryInfo(jdbcConfig, query); - } - - - private static String getQuerySource(DatabaseQueryInfo dbQueryInfo) { - String dbType = dbQueryInfo.getDbConfig().getDatabaseType(); - return DatabaseService.get(dbType).getDatabaseUrl(dbQueryInfo.getDbConfig()); - } - - - private static void setProgress(ImportingJob job, String querySource, int percent) { - job.setProgress(percent, "Reading " + querySource); - } -} diff --git a/extensions/database/src/com/google/refine/extension/database/DatabaseModuleImpl.java b/extensions/database/src/com/google/refine/extension/database/DatabaseModuleImpl.java deleted file mode 100644 index 45bb6aff7..000000000 --- a/extensions/database/src/com/google/refine/extension/database/DatabaseModuleImpl.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database; - -import java.io.BufferedInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.util.Properties; - -import javax.servlet.ServletConfig; - -import org.json.JSONException; -import org.json.JSONWriter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.refine.Jsonizable; - -import edu.mit.simile.butterfly.ButterflyModuleImpl; - - -public class DatabaseModuleImpl extends ButterflyModuleImpl implements Jsonizable { - - private static final Logger logger = LoggerFactory.getLogger("DatabaseModuleImpl"); - - public static DatabaseModuleImpl instance; - - public static Properties extensionProperties; - - private static String DEFAULT_CREATE_PROJ_BATCH_SIZE = "100"; - private static String DEFAULT_PREVIEW_BATCH_SIZE = "100"; - - - - @Override - public void init(ServletConfig config) - throws Exception { - // TODO Auto-generated method stub - super.init(config); - - - readModuleProperty(); - - // Set the singleton. - instance = this; - - logger.info("*** Database Extension Module Initialization Completed!!***"); - } - - public static String getImportCreateBatchSize() { - if(extensionProperties == null) { - return DEFAULT_CREATE_PROJ_BATCH_SIZE; - } - return extensionProperties.getProperty("create.batchSize", DEFAULT_CREATE_PROJ_BATCH_SIZE); - } - - public static String getImportPreviewBatchSize() { - if(extensionProperties == null) { - return DEFAULT_PREVIEW_BATCH_SIZE; - } - return extensionProperties.getProperty("preview.batchSize", DEFAULT_PREVIEW_BATCH_SIZE); - } - - private void readModuleProperty() { - // The module path - File f = getPath(); - if(logger.isDebugEnabled()) { - logger.debug("Module getPath(): {}", f.getPath()); - } - - // Load our custom properties. - File modFile = new File(f,"MOD-INF"); - if(logger.isDebugEnabled()) { - logger.debug("Module File: {}", modFile.getPath()); - } - - if (modFile.exists()) { - - extensionProperties = loadProperties (new File(modFile,"dbextension.properties")); - - } - - } - - private Properties loadProperties(File propFile) { - Properties ps = new Properties(); - try { - if (propFile.exists()) { - if(logger.isDebugEnabled()) { - logger.debug("Loading Extension properties ({})", propFile); - } - BufferedInputStream stream = null; - try { - ps = new Properties(); - stream = new BufferedInputStream(new FileInputStream(propFile)); - ps.load(stream); - - } finally { - // Close the stream. - if (stream != null) stream.close(); - } - - } - } catch (Exception e) { - logger.error("Error loading Database properties", e); - } - return ps; - } - - @Override - public void write(JSONWriter writer, Properties options) - throws JSONException { - // TODO Auto-generated method stub - - } - - -} diff --git a/extensions/database/src/com/google/refine/extension/database/DatabaseService.java b/extensions/database/src/com/google/refine/extension/database/DatabaseService.java deleted file mode 100644 index 13668a98f..000000000 --- a/extensions/database/src/com/google/refine/extension/database/DatabaseService.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database; - -import java.sql.Connection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.refine.extension.database.mariadb.MariaDBDatabaseService; -import com.google.refine.extension.database.model.DatabaseColumn; -import com.google.refine.extension.database.model.DatabaseInfo; -import com.google.refine.extension.database.model.DatabaseRow; -import com.google.refine.extension.database.mysql.MySQLDatabaseService; -import com.google.refine.extension.database.pgsql.PgSQLDatabaseService; - -public abstract class DatabaseService { - - private static final Logger logger = LoggerFactory.getLogger("DatabaseService"); - - - public static class DBType { - private static Map databaseServiceMap = new HashMap(); - - static { - try { - - DatabaseService.DBType.registerDatabase(MySQLDatabaseService.DB_NAME, MySQLDatabaseService.getInstance()); - DatabaseService.DBType.registerDatabase(PgSQLDatabaseService.DB_NAME, PgSQLDatabaseService.getInstance()); - DatabaseService.DBType.registerDatabase(MariaDBDatabaseService.DB_NAME, MariaDBDatabaseService.getInstance()); - - } catch (Exception e) { - logger.error("Exception occurred while trying to prepare databases!", e); - } - } - - public static void registerDatabase(String name, DatabaseService db) { - - if (!databaseServiceMap.containsKey(name)) { - //throw new DatabaseServiceException(name + " cannot be registered. Database Type already exists"); - databaseServiceMap.put(name, db); - logger.info(String.format("Registered %s Database", name)); - }else { - if(logger.isDebugEnabled()) { - logger.debug(name + " Database Type already exists"); - } - - } - - } - - public static DatabaseService getJdbcServiceFromType(String name) { - return databaseServiceMap.get(name); - } - - } - - protected String getDatabaseUrl(DatabaseConfiguration dbConfig) { - int port = dbConfig.getDatabasePort(); - return "jdbc:" + dbConfig.getDatabaseType() + "://" + dbConfig.getDatabaseHost() - + ((port == 0) ? "" : (":" + port)) + "/" + dbConfig.getDatabaseName(); - } - - /** - * get Database - * @param dbType - * @return - */ - public static DatabaseService get(String dbType) { - logger.debug("get called on DatabaseService with, {}", dbType); - DatabaseService databaseService = DatabaseService.DBType.getJdbcServiceFromType(dbType.toLowerCase()); - - logger.debug("DatabaseService found: {}", databaseService.getClass()); - return databaseService; - - } - - - //Database Service APIs - public abstract Connection getConnection(DatabaseConfiguration dbConfig) throws DatabaseServiceException; - - public abstract boolean testConnection(DatabaseConfiguration dbConfig) throws DatabaseServiceException; - - public abstract DatabaseInfo connect(DatabaseConfiguration dbConfig) throws DatabaseServiceException; - - public abstract DatabaseInfo executeQuery(DatabaseConfiguration dbConfig, String query) throws DatabaseServiceException; - - public abstract DatabaseInfo testQuery(DatabaseConfiguration dbConfig, String query) throws DatabaseServiceException; - - public abstract String buildLimitQuery(Integer limit, Integer offset, String query); - - public abstract List getColumns(DatabaseConfiguration dbConfig, String query) throws DatabaseServiceException; - - public abstract List getRows(DatabaseConfiguration dbConfig, String query) throws DatabaseServiceException; - -} diff --git a/extensions/database/src/com/google/refine/extension/database/DatabaseServiceException.java b/extensions/database/src/com/google/refine/extension/database/DatabaseServiceException.java deleted file mode 100644 index cb37f9040..000000000 --- a/extensions/database/src/com/google/refine/extension/database/DatabaseServiceException.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database; - -import java.sql.SQLException; - -public class DatabaseServiceException extends Exception { - - - private static final long serialVersionUID = 1L; - - private boolean sqlException; - private String sqlState; - private int sqlCode; - - - public DatabaseServiceException(String exception) { - super(exception); - } - - - public DatabaseServiceException(boolean sqlException, String sqlState, int sqlCode, String message) { - super(message); - this.sqlException = sqlException; - this.sqlState = sqlState; - this.sqlCode = sqlCode; - - } - - - public boolean isSqlException() { - return sqlException; - } - - - public void setSqlException(boolean sqlException) { - this.sqlException = sqlException; - } - - - public String getSqlState() { - return sqlState; - } - - - public void setSqlState(String sqlState) { - this.sqlState = sqlState; - } - - - public int getSqlCode() { - return sqlCode; - } - - - public void setSqlCode(int sqlCode) { - this.sqlCode = sqlCode; - } - - public DatabaseServiceException(String string, SQLException e) { - super(string, e); - } - -} diff --git a/extensions/database/src/com/google/refine/extension/database/DatabaseUtils.java b/extensions/database/src/com/google/refine/extension/database/DatabaseUtils.java deleted file mode 100644 index db6960581..000000000 --- a/extensions/database/src/com/google/refine/extension/database/DatabaseUtils.java +++ /dev/null @@ -1,389 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.ListIterator; - -import org.codehaus.jackson.JsonGenerationException; -import org.codehaus.jackson.JsonParseException; -import org.codehaus.jackson.map.JsonMappingException; -import org.codehaus.jackson.map.ObjectMapper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.refine.ProjectManager; -import com.google.refine.io.FileProjectManager; - -public class DatabaseUtils { - - private static final Logger logger = LoggerFactory.getLogger("DatabaseUtils"); - - - public final static String DATABASE_EXTENSION_DIR = "dbextension"; - public final static String SETTINGS_FILE_NAME = ".saved-db-connections.json"; - public final static String SAVED_CONNECTION_KEY = "savedConnections"; - - private static SimpleTextEncryptor textEncryptor = new SimpleTextEncryptor("Aa1Gb@tY7_Y"); - - - public static int getSavedConnectionsSize() { - List scList = getSavedConnections(); - if(scList == null || scList.isEmpty()) { - return 0; - } - - return scList.size(); - } - /** - * GET saved connections - * @return - */ - public static List getSavedConnections() { - ObjectMapper mapper = new ObjectMapper(); - try { - String filename = getExtensionFilePath(); - - File file = new File(filename); - if (!file.exists()) { - //logger.debug("saved connections file not found, creating new: {}", filename); - - String dirPath = getExtensionFolder(); - File dirFile = new File(dirPath); - boolean dirExists = true; - if(!dirFile.exists()) { - dirExists = dirFile.mkdir(); - } - - if(dirExists) { - - SavedConnectionContainer sc = new SavedConnectionContainer(new ArrayList()); - mapper.writerWithDefaultPrettyPrinter().writeValue(new File(filename), sc); - return sc.getSavedConnections(); - //return decryptAll(sc.getSavedConnections()); - - } - - } - //logger.debug("saved connections file found {}", filename); - SavedConnectionContainer savedConnectionContainer = mapper.readValue(new File(filename), SavedConnectionContainer.class); - //return decryptAll(savedConnectionContainer.getSavedConnections()); - return savedConnectionContainer.getSavedConnections(); - - } catch (JsonParseException e) { - logger.error("JsonParseException: {}", e); - } catch (JsonMappingException e) { - logger.error("JsonMappingException: {}", e); - } catch (IOException e) { - logger.error("IOException: {}", e); - } - return null; - } - - - - - - /** - * GET one saved connection - * @param connectionName - * @return - */ - public static DatabaseConfiguration getSavedConnection(String connectionName) { - //logger.debug("get saved connection called with connectionName: {}", connectionName); - List savedConfigurations = getSavedConnections(); - - for (DatabaseConfiguration dc : savedConfigurations) { - //logger.debug("Saved Connection : {}", dc.getConnectionName()); - if (dc.getConnectionName().equalsIgnoreCase(connectionName.trim())) { - //logger.debug("Saved Connection Found : {}", dc); - //dc.setDatabasePassword(decrypt(dc.getDatabasePassword())); - return dc; - } - } - - return null; - } - - public static String encrypt(String plainPassword) { - return textEncryptor.encrypt(plainPassword); - } - - public static String decrypt(String encodedPassword) { - return textEncryptor.decrypt(encodedPassword); - } - - public static List decryptAll(List savedConnections) { - List dbConfigs = new ArrayList(savedConnections.size()); - - for(DatabaseConfiguration d: savedConnections) { - d.setDatabasePassword(decrypt(d.getDatabasePassword())); - dbConfigs.add(d); - - } - return dbConfigs; - } - - - /** - * ADD to saved connections - * @param dbConfig - */ - public static void addToSavedConnections(DatabaseConfiguration dbConfig){ - - try { - ObjectMapper mapper = new ObjectMapper(); - String savedConnectionFile = getExtensionFilePath(); - SavedConnectionContainer savedConnectionContainer = mapper.readValue(new File(savedConnectionFile), SavedConnectionContainer.class); - savedConnectionContainer.getSavedConnections().add(dbConfig); - - mapper.writerWithDefaultPrettyPrinter().writeValue(new File(savedConnectionFile), savedConnectionContainer); - - } catch (JsonGenerationException e1) { - logger.error("JsonGenerationException: {}", e1); - // e1.printStackTrace(); - } catch (JsonMappingException e1) { - logger.error("JsonMappingException: {}", e1); - // e1.printStackTrace(); - } catch (IOException e1) { - logger.error("IOException: {}", e1); - // e1.printStackTrace(); - } - } - - - public static void deleteAllSavedConnections() { - if(logger.isDebugEnabled()) { - logger.debug("delete All Saved Connections called..."); - } - - try { - - List savedConnections = getSavedConnections(); - if(logger.isDebugEnabled()) { - logger.debug("Size before delete SavedConnections :: {}", savedConnections.size()); - } - - ArrayList newSavedConns = new ArrayList(); - - ObjectMapper mapper = new ObjectMapper(); - String savedConnectionFile = getExtensionFilePath(); - SavedConnectionContainer savedConnectionContainer = mapper.readValue(new File(savedConnectionFile), SavedConnectionContainer.class); - savedConnectionContainer.setSavedConnections(newSavedConns); - - if(logger.isDebugEnabled()) { - logger.debug("Size after delete SavedConnections :: {}", savedConnectionContainer.getSavedConnections().size()); - } - mapper.writerWithDefaultPrettyPrinter().writeValue(new File(savedConnectionFile), savedConnectionContainer); - - } catch (JsonGenerationException e1) { - logger.error("JsonGenerationException: {}", e1); - // e1.printStackTrace(); - } catch (JsonMappingException e1) { - logger.error("JsonMappingException: {}", e1); - // e1.printStackTrace(); - } catch (IOException e1) { - logger.error("IOException: {}", e1); - // e1.printStackTrace(); - } - - } - - /** - * DELETE saved connections - * @param connectionName - */ - public static void deleteSavedConnections(String connectionName) { - if(logger.isDebugEnabled()) { - logger.debug("deleteSavedConnections called with: {}", connectionName); - } - - try { - - List savedConnections = getSavedConnections();; - if(logger.isDebugEnabled()) { - logger.debug("Size before delete SavedConnections :: {}", savedConnections.size()); - } - - ArrayList newSavedConns = new ArrayList(); - for(DatabaseConfiguration dc: savedConnections) { - if(!dc.getConnectionName().equalsIgnoreCase(connectionName.trim())) { - newSavedConns.add(dc); - } - - } - - ObjectMapper mapper = new ObjectMapper(); - String savedConnectionFile = getExtensionFilePath(); - SavedConnectionContainer savedConnectionContainer = mapper.readValue(new File(savedConnectionFile), SavedConnectionContainer.class); - savedConnectionContainer.setSavedConnections(newSavedConns); - - if(logger.isDebugEnabled()) { - logger.debug("Size after delete SavedConnections :: {}", savedConnectionContainer.getSavedConnections().size()); - } - mapper.writerWithDefaultPrettyPrinter().writeValue(new File(savedConnectionFile), savedConnectionContainer); - - } catch (JsonGenerationException e1) { - logger.error("JsonGenerationException: {}", e1); - // e1.printStackTrace(); - } catch (JsonMappingException e1) { - logger.error("JsonMappingException: {}", e1); - // e1.printStackTrace(); - } catch (IOException e1) { - logger.error("IOException: {}", e1); - // e1.printStackTrace(); - } - } - - /** - * EDIT saved connections - * @param jdbcConfig - */ - public static void editSavedConnections(DatabaseConfiguration jdbcConfig) { - if(logger.isDebugEnabled()) { - logger.debug("Edit SavedConnections called with: {}", jdbcConfig); - } - - - try { - ObjectMapper mapper = new ObjectMapper(); - String savedConnectionFile = getExtensionFilePath(); - SavedConnectionContainer savedConnectionContainer = mapper.readValue(new File(savedConnectionFile), SavedConnectionContainer.class); - - List savedConnections = savedConnectionContainer.getSavedConnections(); - - ListIterator savedConnArrayIter = (ListIterator) savedConnections.listIterator(); - - while (savedConnArrayIter.hasNext()) { - DatabaseConfiguration sc = (DatabaseConfiguration) savedConnArrayIter.next(); - - if (sc.getConnectionName().equals(jdbcConfig.getConnectionName())) { - savedConnArrayIter.remove(); - } - - } - - savedConnections.add(jdbcConfig); - savedConnectionContainer.setSavedConnections(savedConnections); - - mapper.writerWithDefaultPrettyPrinter().writeValue(new File(savedConnectionFile), savedConnectionContainer); - - } catch (JsonGenerationException e1) { - logger.error("JsonGenerationException: {}", e1); - e1.printStackTrace(); - } catch (JsonMappingException e1) { - logger.error("JsonMappingException: {}", e1); - e1.printStackTrace(); - } catch (IOException e1) { - logger.error("IOException: {}", e1); - e1.printStackTrace(); - } - } - - public static String getExtensionFilePath(){ - File dir = ((FileProjectManager) ProjectManager.singleton).getWorkspaceDir(); - String fileSep = System.getProperty("file.separator"); - String filename = dir.getPath() + fileSep + DATABASE_EXTENSION_DIR + fileSep + SETTINGS_FILE_NAME; - - // logger.info("** extension file name: {} **", filename); - return filename; - } - public static String getExtensionFolder(){ - File dir = ((FileProjectManager) ProjectManager.singleton).getWorkspaceDir(); - String fileSep = System.getProperty("file.separator"); - String filename = dir.getPath() + fileSep + DATABASE_EXTENSION_DIR; - return filename; - } - - public static DatabaseColumnType getDbColumnType(int dbColumnType) { - - switch (dbColumnType) { - case java.sql.Types.BIGINT: - return DatabaseColumnType.NUMBER; - case java.sql.Types.FLOAT: - return DatabaseColumnType.FLOAT; - case java.sql.Types.REAL: - return DatabaseColumnType.DOUBLE; - case java.sql.Types.DOUBLE: - return DatabaseColumnType.DOUBLE; - case java.sql.Types.NUMERIC: - return DatabaseColumnType.NUMBER; - case java.sql.Types.DECIMAL: - return DatabaseColumnType.STRING; - case java.sql.Types.CHAR: - return DatabaseColumnType.STRING; - case java.sql.Types.VARCHAR: - return DatabaseColumnType.STRING; - case java.sql.Types.LONGVARCHAR: - return DatabaseColumnType.STRING; - case java.sql.Types.DATE: - return DatabaseColumnType.DATE; - case java.sql.Types.TIME: - return DatabaseColumnType.DATETIME; - case java.sql.Types.TIMESTAMP: - return DatabaseColumnType.DATETIME; - case java.sql.Types.BINARY: - return DatabaseColumnType.STRING; - case java.sql.Types.VARBINARY: - return DatabaseColumnType.STRING; - case java.sql.Types.LONGVARBINARY: - return DatabaseColumnType.STRING; - case java.sql.Types.NULL: - return DatabaseColumnType.STRING; - case java.sql.Types.OTHER: - return DatabaseColumnType.STRING; - case java.sql.Types.JAVA_OBJECT: - return DatabaseColumnType.STRING; - case java.sql.Types.DISTINCT: - return DatabaseColumnType.STRING; - case java.sql.Types.STRUCT: - return DatabaseColumnType.STRING; - case java.sql.Types.ARRAY: - return DatabaseColumnType.STRING; - case java.sql.Types.BLOB: - return DatabaseColumnType.STRING; - case java.sql.Types.CLOB: - return DatabaseColumnType.STRING; - case java.sql.Types.REF: - return DatabaseColumnType.STRING; - case java.sql.Types.BOOLEAN: - return DatabaseColumnType.BOOLEAN; - case java.sql.Types.INTEGER: - return DatabaseColumnType.NUMBER; - - default: - return DatabaseColumnType.STRING; - } - - } - -} diff --git a/extensions/database/src/com/google/refine/extension/database/SQLType.java b/extensions/database/src/com/google/refine/extension/database/SQLType.java deleted file mode 100644 index 2871b6abd..000000000 --- a/extensions/database/src/com/google/refine/extension/database/SQLType.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database; - - - -import java.util.HashMap; -import java.util.Map; - - -public final class SQLType { - - private static final Map jdbcDriverRegistry = new HashMap(); - private final DriverContainer driverContainer; - - private SQLType(DriverContainer container) { - this.driverContainer = container; - } - - public static SQLType forName(String name) { - for (SQLType sqlType : jdbcDriverRegistry.values()) { - if (sqlType.getIdentifier().equalsIgnoreCase(name)) { - return sqlType; - } - } - return null; - } - - public static SQLType registerSQLDriver(String identifier, String classpath) { - return registerSQLDriver(identifier, classpath, true); - } - - public static SQLType registerSQLDriver(String identifier, String classpath, boolean useJDBCManager) { - DriverContainer driverContainer = new DriverContainer(identifier, classpath, useJDBCManager); - if (!jdbcDriverRegistry.containsKey(driverContainer)) { - SQLType newType = new SQLType(driverContainer); - jdbcDriverRegistry.put(driverContainer, newType); - return newType; - } - return null; - } - - - public String getClassPath() { - return this.driverContainer.classpath; - } - - public String getIdentifier() { - return this.driverContainer.identifier; - } - - public boolean usesJDBCManager() { - return this.driverContainer.useJDBCManager; - } - - - private static class DriverContainer { - - public final String classpath; - public final String identifier; - public final boolean useJDBCManager; - - private DriverContainer(String identifier, String classpath, boolean useJDBCManager) { - this.classpath = classpath; - this.identifier = identifier; - this.useJDBCManager = useJDBCManager; - } - - public final boolean equals(Object obj) { - return obj instanceof DriverContainer && ((DriverContainer) obj).classpath.equals(this.classpath) - && ((DriverContainer) obj).identifier.equals(this.identifier) - && ((DriverContainer) obj).useJDBCManager == this.useJDBCManager; - } - } -} diff --git a/extensions/database/src/com/google/refine/extension/database/SavedConnectionContainer.java b/extensions/database/src/com/google/refine/extension/database/SavedConnectionContainer.java deleted file mode 100644 index 15a45f731..000000000 --- a/extensions/database/src/com/google/refine/extension/database/SavedConnectionContainer.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database; - -import java.util.List; - -public class SavedConnectionContainer { - private List savedConnections; - - public List getSavedConnections() { - return savedConnections; - } - - - public void setSavedConnections(List savedConnections) { - this.savedConnections = savedConnections; - } - - - - public SavedConnectionContainer(List savedConnections) { - super(); - this.savedConnections = savedConnections; - } - - - public SavedConnectionContainer() { - - } - - -} diff --git a/extensions/database/src/com/google/refine/extension/database/SimpleTextEncryptor.java b/extensions/database/src/com/google/refine/extension/database/SimpleTextEncryptor.java deleted file mode 100644 index ad5f20d95..000000000 --- a/extensions/database/src/com/google/refine/extension/database/SimpleTextEncryptor.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database; - -import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; -import org.jasypt.util.text.TextEncryptor; - - -public class SimpleTextEncryptor implements TextEncryptor { - - private final StandardPBEStringEncryptor encryptor; - - @Override - public String decrypt(String encryptedMessage) { - return this.encryptor.decrypt(encryptedMessage); - } - - @Override - public String encrypt(String message) { - return this.encryptor.encrypt(message); - } - - public SimpleTextEncryptor(String passwordChars) { - super(); - - this.encryptor = new StandardPBEStringEncryptor(); - this.encryptor.setAlgorithm("PBEWithMD5AndDES"); - this.encryptor.setPasswordCharArray(passwordChars.toCharArray()); - } - - - - public void setPassword(final String password) { - this.encryptor.setPassword(password); - } - - - /** - * Sets a password, as a char[] - * - * @since 1.8 - * @param password the password to be set. - */ - public void setPasswordCharArray(final char[] password) { - this.encryptor.setPasswordCharArray(password); - } - - - -} diff --git a/extensions/database/src/com/google/refine/extension/database/cmd/ConnectCommand.java b/extensions/database/src/com/google/refine/extension/database/cmd/ConnectCommand.java deleted file mode 100644 index 014b30930..000000000 --- a/extensions/database/src/com/google/refine/extension/database/cmd/ConnectCommand.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database.cmd; - -import java.io.IOException; -import java.io.Writer; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.http.HttpStatus; -import org.codehaus.jackson.map.ObjectMapper; -import org.json.JSONWriter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -//import com.google.refine.ProjectManager; -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseService; -import com.google.refine.extension.database.DatabaseServiceException; -import com.google.refine.extension.database.model.DatabaseInfo; - - -public class ConnectCommand extends DatabaseCommand { - - private static final Logger logger = LoggerFactory.getLogger("ConnectCommand"); - - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - - DatabaseConfiguration databaseConfiguration = getJdbcConfiguration(request); - if(logger.isDebugEnabled()) { - logger.debug("ConnectCommand::Post::{}", databaseConfiguration); - } - // ProjectManager.singleton.setBusy(true); - try { - - response.setCharacterEncoding("UTF-8"); - response.setHeader("Content-Type", "application/json"); - Writer w = response.getWriter(); - JSONWriter writer = new JSONWriter(w); - ObjectMapper mapperObj = new ObjectMapper(); - - try { - DatabaseInfo databaseInfo = DatabaseService.get(databaseConfiguration.getDatabaseType()) - .connect(databaseConfiguration); - String databaseInfoString = mapperObj.writeValueAsString(databaseInfo); - response.setStatus(HttpStatus.SC_OK); - writer.object(); - writer.key("code"); - writer.value("ok"); - writer.key("databaseInfo"); - writer.value(databaseInfoString); - - writer.endObject(); - - } catch (DatabaseServiceException e) { - logger.error("ConnectCommand::Post::DatabaseServiceException::{}", e); - sendError(HttpStatus.SC_UNAUTHORIZED,response, writer, e); - }catch (Exception e) { - logger.error("ConnectCommand::Post::Exception::{}", e); - sendError(HttpStatus.SC_UNAUTHORIZED,response, writer, e); - } finally { - // w.flush(); - w.close(); - } - } catch (Exception e) { - logger.error("ConnectCommand::Post::Exception::{}", e); - throw new ServletException(e); - } -// finally { -// // ProjectManager.singleton.setBusy(false); -// } - - - } - -} diff --git a/extensions/database/src/com/google/refine/extension/database/cmd/DatabaseCommand.java b/extensions/database/src/com/google/refine/extension/database/cmd/DatabaseCommand.java deleted file mode 100644 index ccd967d95..000000000 --- a/extensions/database/src/com/google/refine/extension/database/cmd/DatabaseCommand.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database.cmd; - -import java.io.IOException; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.json.JSONWriter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.refine.commands.Command; -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseServiceException; - -public abstract class DatabaseCommand extends Command { - - private static final Logger logger = LoggerFactory.getLogger("DatabaseCommand"); - - /** - * - * @param request - * @return - */ - protected DatabaseConfiguration getJdbcConfiguration(HttpServletRequest request) { - DatabaseConfiguration jdbcConfig = new DatabaseConfiguration(); - - jdbcConfig.setConnectionName(request.getParameter("connectionName")); - jdbcConfig.setDatabaseType(request.getParameter("databaseType")); - jdbcConfig.setDatabaseHost(request.getParameter("databaseServer")); - - String dbPort = request.getParameter("databasePort"); - if(dbPort != null) { - try { - jdbcConfig.setDatabasePort(Integer.parseInt(dbPort)); - }catch(NumberFormatException nfe) {} - } - - jdbcConfig.setDatabaseUser(request.getParameter("databaseUser")); - jdbcConfig.setDatabasePassword(request.getParameter("databasePassword")); - jdbcConfig.setDatabaseName(request.getParameter("initialDatabase")); - jdbcConfig.setDatabaseSchema(request.getParameter("initialSchema")); - - if(logger.isDebugEnabled()) { - logger.debug("JDBC Configuration: {}", jdbcConfig); - } - return jdbcConfig; - } - /** - * - * @param status - * @param response - * @param writer - * @param e - * @throws IOException - */ - protected void sendError(int status, HttpServletResponse response, JSONWriter writer, Exception e) - throws IOException { - - //logger.info("sendError::{}", writer); - response.sendError(status, e.getMessage()); - - } - /** - * - * @param status - * @param response - * @param writer - * @param e - * @throws IOException - */ - protected void sendError(int status, HttpServletResponse response, JSONWriter writer, DatabaseServiceException e) - throws IOException { - - String message = ""; - - if(e.getSqlState() != null) { - - message = message + "SqlCode:" + e.getSqlCode() + "SqlState" + e.getSqlState(); - } - - message = message + e.getMessage(); - - response.sendError(status, e.getMessage()); - - } - -} diff --git a/extensions/database/src/com/google/refine/extension/database/cmd/ExecuteQueryCommand.java b/extensions/database/src/com/google/refine/extension/database/cmd/ExecuteQueryCommand.java deleted file mode 100644 index 90a0dd387..000000000 --- a/extensions/database/src/com/google/refine/extension/database/cmd/ExecuteQueryCommand.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database.cmd; - -import java.io.IOException; -import java.io.Writer; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.http.HttpStatus; -import org.codehaus.jackson.map.ObjectMapper; -import org.json.JSONWriter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -//import com.google.refine.ProjectManager; -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseService; -import com.google.refine.extension.database.DatabaseServiceException; -import com.google.refine.extension.database.model.DatabaseInfo; - - -public class ExecuteQueryCommand extends DatabaseCommand { - - private static final Logger logger = LoggerFactory.getLogger("ExecuteQueryCommand"); - - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - - - DatabaseConfiguration databaseConfiguration = getJdbcConfiguration(request); - String query = request.getParameter("queryString"); - if(logger.isDebugEnabled()) { - logger.debug("QueryCommand::Post::DatabaseConfiguration::{}::Query::{} " ,databaseConfiguration, query); - } - - //ProjectManager.singleton.setBusy(true); - try { - - response.setCharacterEncoding("UTF-8"); - response.setHeader("Content-Type", "application/json"); - Writer w = response.getWriter(); - JSONWriter writer = new JSONWriter(w); - - try { - DatabaseInfo databaseInfo = DatabaseService.get(databaseConfiguration.getDatabaseType()) - .executeQuery(databaseConfiguration, query); - ObjectMapper mapperObj = new ObjectMapper(); - - response.setStatus(HttpStatus.SC_OK); - String jsonStr = mapperObj.writeValueAsString(databaseInfo); - - if(logger.isDebugEnabled()) { - logger.debug("QueryCommand::Post::Result::{} " ,jsonStr); - } - - - writer.object(); - writer.key("code"); - writer.value("ok"); - writer.key("QueryResult"); - writer.value(jsonStr); - writer.endObject(); - - - } catch (DatabaseServiceException e) { - logger.error("QueryCommand::Post::DatabaseServiceException::{}", e); - sendError(HttpStatus.SC_BAD_REQUEST, response, writer, e); - - } catch (Exception e) { - logger.error("QueryCommand::Post::Exception::{}", e); - sendError(HttpStatus.SC_BAD_REQUEST,response, writer, e); - } finally { - w.close(); - } - } catch (Exception e) { - logger.error("QueryCommand::Post::Exception::{}", e); - throw new ServletException(e); - } -// finally { -// // ProjectManager.singleton.setBusy(false); -// } - - - } - -} diff --git a/extensions/database/src/com/google/refine/extension/database/cmd/SavedConnectionCommand.java b/extensions/database/src/com/google/refine/extension/database/cmd/SavedConnectionCommand.java deleted file mode 100644 index 4084972c5..000000000 --- a/extensions/database/src/com/google/refine/extension/database/cmd/SavedConnectionCommand.java +++ /dev/null @@ -1,349 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database.cmd; - -import java.io.IOException; -import java.io.Writer; -import java.util.List; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.http.HttpStatus; -import org.json.JSONException; -import org.json.JSONWriter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseUtils; - - -public class SavedConnectionCommand extends DatabaseCommand { - - private static final Logger logger = LoggerFactory.getLogger("SavedConnectionCommand"); - - - @Override - public void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - - if(logger.isDebugEnabled()) { - logger.debug("SavedConnectionCommand::Get::connectionName::{}", request.getParameter("connectionName")); - } - - String connectionName = request.getParameter("connectionName"); - try { - response.setCharacterEncoding("UTF-8"); - response.setHeader("Content-Type", "application/json"); - if(connectionName == null || connectionName.isEmpty()) { - writeSavedConnectionResponse(response); - }else { - - DatabaseConfiguration savedConnection = DatabaseUtils.getSavedConnection(connectionName); - writeSavedConnectionResponse(response, savedConnection); - - } - - } catch (Exception e) { - logger.error("Exception while loading settings {}", e); - } - } - - - @Override - public void doDelete(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - - - if(logger.isDebugEnabled()) { - logger.debug("SavedConnectionCommand::Delete Connection: {}", request.getParameter("connectionName")); - } - - String connectionName = request.getParameter("connectionName"); - - DatabaseConfiguration savedConn = DatabaseUtils.getSavedConnection(connectionName); - if(savedConn == null) { - //logger.error("Connection With name:: {} does not exist!", request.getParameter("connectionName")); - response.sendError(HttpStatus.SC_BAD_REQUEST, "Connection with name " + connectionName + " does not exists!"); - response.flushBuffer(); - return; - } - - try { - - DatabaseUtils.deleteSavedConnections(connectionName); - response.setCharacterEncoding("UTF-8"); - response.setHeader("Content-Type", "application/json"); - - writeSavedConnectionResponse(response); - - } catch (Exception e) { - logger.error("Exception while Deleting Connection with name: {}, error:{}",connectionName, e); - } - } - - /** - * - * @param response - * @param savedConnection - * @throws IOException - * @throws JSONException - */ - private void writeSavedConnectionResponse(HttpServletResponse response, DatabaseConfiguration savedConnection) throws IOException, JSONException { - Writer w = response.getWriter(); - try { - JSONWriter writer = new JSONWriter(w); - - writer.object(); - writer.key(DatabaseUtils.SAVED_CONNECTION_KEY); - writer.array(); - - writer.object(); - writer.key("connectionName"); - writer.value(savedConnection.getConnectionName()); - - writer.key("databaseType"); - writer.value(savedConnection.getDatabaseType()); - - writer.key("databaseHost"); - writer.value(savedConnection.getDatabaseHost()); - - writer.key("databasePort"); - writer.value(savedConnection.getDatabasePort()); - - writer.key("databaseName"); - writer.value(savedConnection.getDatabaseName()); - - writer.key("databasePassword"); - - // - String dbPasswd = savedConnection.getDatabasePassword(); - if(dbPasswd != null && !dbPasswd.isEmpty()) { - dbPasswd = DatabaseUtils.decrypt(savedConnection.getDatabasePassword()); - //logger.info("Decrypted Password::" + dbPasswd); - } - writer.value(dbPasswd); - // - - // writer.value(savedConnection.getDatabasePassword()); - - writer.key("databaseSchema"); - writer.value(savedConnection.getDatabaseSchema()); - - writer.key("databaseUser"); - writer.value(savedConnection.getDatabaseUser()); - - writer.endObject(); - writer.endArray(); - - writer.endObject(); - - }finally { - w.flush(); - w.close(); - } - - } - /** - * - * @param response - * @throws IOException - * @throws JSONException - */ - private void writeSavedConnectionResponse(HttpServletResponse response) throws IOException, JSONException { - Writer w = response.getWriter(); - try { - - List savedConnections = DatabaseUtils.getSavedConnections(); - JSONWriter writer = new JSONWriter(w); - - writer.object(); - writer.key(DatabaseUtils.SAVED_CONNECTION_KEY); - writer.array(); - - int size = savedConnections.size(); - - for (int i = 0; i < size; i++) { - - writer.object(); - DatabaseConfiguration dbConfig = (DatabaseConfiguration) savedConnections.get(i); - - writer.key("connectionName"); - writer.value(dbConfig.getConnectionName()); - - writer.key("databaseType"); - writer.value(dbConfig.getDatabaseType()); - - writer.key("databaseHost"); - writer.value(dbConfig.getDatabaseHost()); - - writer.key("databasePort"); - writer.value(dbConfig.getDatabasePort()); - - writer.key("databaseName"); - writer.value(dbConfig.getDatabaseName()); - - writer.key("databasePassword"); - - String dbPasswd = dbConfig.getDatabasePassword(); - if(dbPasswd != null && !dbPasswd.isEmpty()) { - dbPasswd = DatabaseUtils.decrypt(dbConfig.getDatabasePassword()); - } - // writer.value(dbConfig.getDatabasePassword()); - writer.value(dbPasswd); - - writer.key("databaseSchema"); - writer.value(dbConfig.getDatabaseSchema()); - - writer.key("databaseUser"); - writer.value(dbConfig.getDatabaseUser()); - - writer.endObject(); - - } - writer.endArray(); - writer.endObject(); - // logger.info("Saved Connection Get Response sent"); - } finally { - w.flush(); - w.close(); - } - } - - /** - * Add a new Saved JDBC connection configuration - */ - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - - if(logger.isDebugEnabled()) { - logger.debug("doPost Connection: {}", request.getParameter("connectionName")); - } - - DatabaseConfiguration jdbcConfig = getJdbcConfiguration(request); - - - response.setCharacterEncoding("UTF-8"); - response.setHeader("Content-Type", "application/json"); - - if(jdbcConfig.getConnectionName() == null) { - response.sendError(HttpStatus.SC_BAD_REQUEST, "Connection Name is Required!"); - response.flushBuffer(); - return; - } - - DatabaseConfiguration savedConn = DatabaseUtils.getSavedConnection(jdbcConfig.getConnectionName()); - if(savedConn != null) { - response.sendError(HttpStatus.SC_BAD_REQUEST, "Connection with name " + jdbcConfig.getConnectionName() + " already exists!"); - response.flushBuffer(); - return; - } - - - if(jdbcConfig.getDatabasePassword() != null) { - //logger.debug("SavedConnectionCommand::Post::password::{}", jdbcConfig.getDatabasePassword()); - jdbcConfig.setDatabasePassword(DatabaseUtils.encrypt(jdbcConfig.getDatabasePassword())); - } - - DatabaseUtils.addToSavedConnections(jdbcConfig); - - try { - response.setCharacterEncoding("UTF-8"); - response.setHeader("Content-Type", "application/json"); - - writeSavedConnectionResponse(response); - } catch (Exception e) { - logger.error("Exception while loading settings {}", e); - } - - } - - - - @Override - public void doPut(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - - - if(logger.isDebugEnabled()) { - logger.debug("databaseType::{} " , request.getParameter("databaseHost")); - } - // logger.info("databaseHost::{} " , request.getParameter("databaseServer")); - - DatabaseConfiguration jdbcConfig = getJdbcConfiguration(request); - StringBuilder sb = new StringBuilder(); - boolean error = false; - if(jdbcConfig.getConnectionName() == null) { - sb.append("Connection Name, "); - error = true; - } - if(jdbcConfig.getDatabaseHost() == null) { - sb.append("Database Host, "); - error = true; - } - if(jdbcConfig.getDatabaseUser() == null) { - sb.append("Database User, "); - error = true; - } - if(jdbcConfig.getDatabaseName() == null) { - sb.append("Database Name, "); - error = true; - } - if(error) { - sb.append(" is missing"); - logger.info("Connection Parameter errors::{}", sb.toString()); - response.sendError(HttpStatus.SC_BAD_REQUEST, sb.toString()); - } - - if(logger.isDebugEnabled()) { - logger.debug("Connection Config:: {}", jdbcConfig.getConnectionName()); - } - - if(jdbcConfig.getDatabasePassword() != null) { - jdbcConfig.setDatabasePassword(DatabaseUtils.encrypt(jdbcConfig.getDatabasePassword())); - } - - DatabaseUtils.editSavedConnections(jdbcConfig); - - try { - response.setCharacterEncoding("UTF-8"); - response.setHeader("Content-Type", "application/json"); - - writeSavedConnectionResponse(response); - - } catch (Exception e) { - logger.error("Exception while loading settings {}", e); - } - } - - -} diff --git a/extensions/database/src/com/google/refine/extension/database/cmd/TestConnectCommand.java b/extensions/database/src/com/google/refine/extension/database/cmd/TestConnectCommand.java deleted file mode 100644 index b4cd0dd0b..000000000 --- a/extensions/database/src/com/google/refine/extension/database/cmd/TestConnectCommand.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database.cmd; - -import java.io.IOException; -import java.io.Writer; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.http.HttpStatus; -import org.json.JSONWriter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseService; -import com.google.refine.extension.database.DatabaseServiceException; - - - -public class TestConnectCommand extends DatabaseCommand { - - private static final Logger logger = LoggerFactory.getLogger("TestConnectCommand"); - - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - - - DatabaseConfiguration databaseConfiguration = getJdbcConfiguration(request); - if(logger.isDebugEnabled()) { - logger.debug("TestConnectCommand::Post::{}", databaseConfiguration); - } - - - //ProjectManager.singleton.setBusy(true); - try { - - - response.setCharacterEncoding("UTF-8"); - response.setHeader("Content-Type", "application/json"); - - Writer w = response.getWriter(); - JSONWriter writer = new JSONWriter(w); - - try { - - boolean connectionTestResult = DatabaseService.get(databaseConfiguration.getDatabaseType()) - .testConnection(databaseConfiguration); - - response.setStatus(HttpStatus.SC_OK); - writer.object(); - - writer.key("connectionResult"); - writer.value(connectionTestResult); - writer.key("code"); - writer.value("ok"); - writer.endObject(); - - } catch (DatabaseServiceException e) { - logger.error("TestConnectCommand::Post::DatabaseServiceException::{}", e); - sendError(HttpStatus.SC_UNAUTHORIZED,response, writer, e); - } finally { - // writer.endObject(); - // w.flush(); - w.close(); - } - } catch (Exception e) { - logger.error("TestConnectCommand::Post::Exception::{}", e); - throw new ServletException(e); - } finally { - //ProjectManager.singleton.setBusy(false); - } - - - } - - -} diff --git a/extensions/database/src/com/google/refine/extension/database/cmd/TestQueryCommand.java b/extensions/database/src/com/google/refine/extension/database/cmd/TestQueryCommand.java deleted file mode 100644 index a728fc1bd..000000000 --- a/extensions/database/src/com/google/refine/extension/database/cmd/TestQueryCommand.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database.cmd; - -import java.io.IOException; -import java.io.Writer; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.http.HttpStatus; -import org.codehaus.jackson.map.ObjectMapper; -import org.json.JSONWriter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -//import com.google.refine.ProjectManager; -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseService; -import com.google.refine.extension.database.DatabaseServiceException; -import com.google.refine.extension.database.model.DatabaseInfo; - - -public class TestQueryCommand extends DatabaseCommand { - - private static final Logger logger = LoggerFactory.getLogger("TestQueryCommand"); - - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - - DatabaseConfiguration dbConfig = getJdbcConfiguration(request); - String query = request.getParameter("query"); - - if(logger.isDebugEnabled()) { - logger.debug("TestQueryCommand::Post::DatabaseConfiguration::{}::Query::{} " ,dbConfig, query); - } - - - //ProjectManager.singleton.setBusy(true); - try { - - response.setCharacterEncoding("UTF-8"); - response.setHeader("Content-Type", "application/json"); - Writer w = response.getWriter(); - JSONWriter writer = new JSONWriter(w); - - try { - DatabaseInfo databaseInfo = DatabaseService.get(dbConfig.getDatabaseType()) - .testQuery(dbConfig, query); - ObjectMapper mapperObj = new ObjectMapper(); - - response.setStatus(HttpStatus.SC_OK); - String jsonStr = mapperObj.writeValueAsString(databaseInfo); - if(logger.isDebugEnabled()) { - logger.debug("TestQueryCommand::Post::Result::{} " ,jsonStr); - } - - writer.object(); - writer.key("code"); - writer.value("ok"); - writer.key("QueryResult"); - writer.value(jsonStr); - writer.endObject(); - - - } catch (DatabaseServiceException e) { - logger.error("TestQueryCommand::Post::DatabaseServiceException::{}", e); - sendError(HttpStatus.SC_BAD_REQUEST, response, writer, e); - - } catch (Exception e) { - logger.error("TestQueryCommand::Post::Exception::{}", e); - sendError(HttpStatus.SC_BAD_REQUEST,response, writer, e); - } finally { - w.close(); - } - } catch (Exception e) { - logger.error("TestQueryCommand::Post::Exception::{}", e); - throw new ServletException(e); - } -// finally { -// // ProjectManager.singleton.setBusy(false); -// } - - - } - -} diff --git a/extensions/database/src/com/google/refine/extension/database/mariadb/MariaDBConnectionManager.java b/extensions/database/src/com/google/refine/extension/database/mariadb/MariaDBConnectionManager.java deleted file mode 100644 index 4af014afc..000000000 --- a/extensions/database/src/com/google/refine/extension/database/mariadb/MariaDBConnectionManager.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database.mariadb; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseServiceException; -import com.google.refine.extension.database.SQLType; - - - -public class MariaDBConnectionManager { - - private static final Logger logger = LoggerFactory.getLogger("MariaDBConnectionManager"); - private Connection connection; - private SQLType type; - - private static MariaDBConnectionManager instance; - - /** - * - * @param type - * @param databaseConfiguration - * @throws SQLException - */ - private MariaDBConnectionManager() { - type = SQLType.forName(MariaDBDatabaseService.DB_NAME); - - } - - - - - /** - * Create a new instance of this connection manager. - * - * @return an instance of the manager - * - * @throws DatabaseServiceException - */ - public static MariaDBConnectionManager getInstance() throws DatabaseServiceException { - if (instance == null) { - //logger.info("::Creating new MariaDB Connection Manager ::"); - instance = new MariaDBConnectionManager(); - - } - return instance; - } - - - /** - * Get the SQL Database type. - * - * @return the type - */ - public SQLType getType() { - return this.type; - } - - /** - * testConnection - * @param databaseConfiguration - * @return - */ - public boolean testConnection(DatabaseConfiguration databaseConfiguration) throws DatabaseServiceException{ - - try { - boolean connResult = false; - - Connection conn = getConnection(databaseConfiguration, true); - if(conn != null) { - connResult = true; - conn.close(); - } - - return connResult; - - } - catch (SQLException e) { - logger.error("Test connection Failed!", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - } - - } - - /** - * Get a connection form the connection pool. - * - * @return connection from the pool - */ - public Connection getConnection(DatabaseConfiguration databaseConfiguration, boolean forceNewConnection) throws DatabaseServiceException{ - try { - - // logger.info("connection::{}, forceNewConnection: {}", connection, forceNewConnection); - - if (connection != null && !forceNewConnection) { - // logger.debug("connection closed::{}", connection.isClosed()); - if (!connection.isClosed()) { - if(logger.isDebugEnabled()) { - logger.debug("Returning existing connection::{}", connection); - } - - - return connection; - } - } - - Class.forName(type.getClassPath()); - DriverManager.setLoginTimeout(10); - String dbURL = getDatabaseUrl(databaseConfiguration); - connection = DriverManager.getConnection(dbURL, databaseConfiguration.getDatabaseUser(), - databaseConfiguration.getDatabasePassword()); - - if(logger.isDebugEnabled()) { - logger.debug("*** Acquired New connection for ::{} **** ", dbURL); - } - - - return connection; - - - } catch (ClassNotFoundException e) { - logger.error("Jdbc Driver not found", e); - throw new DatabaseServiceException(e.getMessage()); - } catch (SQLException e) { - logger.error("SQLException::Couldn't get a Connection!", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - } - } - - - public void shutdown() { - - if (connection != null) { - try { - connection.close(); - } - catch (SQLException e) { - logger.warn("Non-Managed connection could not be closed. Whoops!", e); - } - } - - } - - - - private static String getDatabaseUrl(DatabaseConfiguration dbConfig) { - - int port = dbConfig.getDatabasePort(); - return "jdbc:" + dbConfig.getDatabaseType().toLowerCase() + "://" + dbConfig.getDatabaseHost() - + ((port == 0) ? "" : (":" + port)) + "/" + dbConfig.getDatabaseName(); - - } -} diff --git a/extensions/database/src/com/google/refine/extension/database/mariadb/MariaDBDatabaseService.java b/extensions/database/src/com/google/refine/extension/database/mariadb/MariaDBDatabaseService.java deleted file mode 100644 index f5760a6b2..000000000 --- a/extensions/database/src/com/google/refine/extension/database/mariadb/MariaDBDatabaseService.java +++ /dev/null @@ -1,325 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database.mariadb; - -import java.sql.Connection; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.List; - -import org.mariadb.jdbc.MariaDbResultSetMetaData; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseService; -import com.google.refine.extension.database.DatabaseServiceException; -import com.google.refine.extension.database.DatabaseUtils; -import com.google.refine.extension.database.SQLType; -import com.google.refine.extension.database.model.DatabaseColumn; -import com.google.refine.extension.database.model.DatabaseInfo; -import com.google.refine.extension.database.model.DatabaseRow; -import com.google.refine.extension.database.mysql.MySQLConnectionManager; - - - -public class MariaDBDatabaseService extends DatabaseService { - - private static final Logger logger = LoggerFactory.getLogger("MariaDBDatabaseService"); - - public static final String DB_NAME = "mariadb"; - public static final String DB_DRIVER = "org.mariadb.jdbc.Driver"; - - private static MariaDBDatabaseService instance; - - private MariaDBDatabaseService() { - } - - public static MariaDBDatabaseService getInstance() { - if (instance == null) { - SQLType.registerSQLDriver(DB_NAME, DB_DRIVER); - instance = new MariaDBDatabaseService(); - if(logger.isDebugEnabled()) { - logger.debug("MariaDBDatabaseService Instance: {}", instance); - } - } - return instance; - } - - @Override - public boolean testConnection(DatabaseConfiguration dbConfig) throws DatabaseServiceException{ - return MariaDBConnectionManager.getInstance().testConnection(dbConfig); - - } - - @Override - public DatabaseInfo connect(DatabaseConfiguration dbConfig) throws DatabaseServiceException{ - return getMetadata(dbConfig); - } - - - @Override - public DatabaseInfo executeQuery(DatabaseConfiguration dbConfig, String query) throws DatabaseServiceException{ - - - try { - Connection connection = MariaDBConnectionManager.getInstance().getConnection(dbConfig, false); - Statement statement = connection.createStatement(); - ResultSet queryResult = statement.executeQuery(query); - MariaDbResultSetMetaData metadata = (MariaDbResultSetMetaData)queryResult.getMetaData(); - int columnCount = metadata.getColumnCount(); - ArrayList columns = new ArrayList(columnCount); - - for (int i = 1; i <= columnCount; i++) { - DatabaseColumn dc = new DatabaseColumn( - metadata.getColumnName(i), - metadata.getColumnLabel(i), - DatabaseUtils.getDbColumnType(metadata.getColumnType(i)), - metadata.getColumnDisplaySize(i)); - columns.add(dc); - } - int index = 0; - List rows = new ArrayList(); - - while (queryResult.next()) { - DatabaseRow row = new DatabaseRow(); - row.setIndex(index); - List values = new ArrayList(columnCount); - for (int i = 1; i <= columnCount; i++) { - - values.add(queryResult.getString(i)); - - } - row.setValues(values); - rows.add(row); - index++; - - } - - DatabaseInfo dbInfo = new DatabaseInfo(); - dbInfo.setColumns(columns); - dbInfo.setRows(rows); - return dbInfo; - - } catch (SQLException e) { - logger.error("SQLException::", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - } finally { - MariaDBConnectionManager.getInstance().shutdown(); - } - } - - /** - * - * @param connectionInfo - * @return - * @throws DatabaseServiceException - */ - private DatabaseInfo getMetadata(DatabaseConfiguration connectionInfo) throws DatabaseServiceException { - - try { - Connection connection = MariaDBConnectionManager.getInstance().getConnection(connectionInfo, true); - if(connection != null) { - java.sql.DatabaseMetaData metadata; - - metadata = connection.getMetaData(); - - int dbMajorVersion = metadata.getDatabaseMajorVersion(); - int dbMinorVersion = metadata.getDatabaseMinorVersion(); - String dbProductVersion = metadata.getDatabaseProductVersion(); - String dbProductName = metadata.getDatabaseProductName(); - DatabaseInfo dbInfo = new DatabaseInfo(); - - dbInfo.setDatabaseMajorVersion(dbMajorVersion); - dbInfo.setDatabaseMinorVersion(dbMinorVersion); - dbInfo.setDatabaseProductVersion(dbProductVersion); - dbInfo.setDatabaseProductName(dbProductName); - return dbInfo; - } - - } catch (SQLException e) { - logger.error("SQLException::", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - } - - return null; - - } - - @Override - public String buildLimitQuery(Integer limit, Integer offset, String query) { -// if(logger.isDebugEnabled()) { -// logger.info( "<<< original input query::{} >>>" , query ); -// } -// - final int len = query.length(); - String parsedQuery = len > 0 && query.endsWith(";") ? query.substring(0, len - 1) : query; - - - StringBuilder sb = new StringBuilder(); - sb.append(parsedQuery); - - if(limit != null) { - sb.append(" LIMIT" + " " + limit); - } - - if(offset != null) { - sb.append(" OFFSET" + " " + offset); - } - sb.append(";"); - String parsedQueryOut = sb.toString(); - -// if(logger.isDebugEnabled()) { -// logger.info( "<<>>" , parsedQueryOut ); -// } - - return parsedQueryOut; - } - - @Override - public ArrayList getColumns(DatabaseConfiguration dbConfig, String query) throws DatabaseServiceException{ - - try { - - Connection connection = MariaDBConnectionManager.getInstance().getConnection(dbConfig, true); - Statement statement = connection.createStatement(); - - ResultSet queryResult = statement.executeQuery(query); - MariaDbResultSetMetaData metadata = (MariaDbResultSetMetaData) queryResult.getMetaData(); - int columnCount = metadata.getColumnCount(); - ArrayList columns = new ArrayList(columnCount); - - for (int i = 1; i <= columnCount; i++) { - DatabaseColumn dc = new DatabaseColumn(metadata.getColumnName(i), metadata.getColumnLabel(i), - DatabaseUtils.getDbColumnType(metadata.getColumnType(i)), metadata.getColumnDisplaySize(i)); - columns.add(dc); - } - - return columns; - - } catch (SQLException e) { - logger.error("SQLException::", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - } - - } - - @Override - public List getRows(DatabaseConfiguration dbConfig, String query) - throws DatabaseServiceException { - - - try { - Connection connection = MariaDBConnectionManager.getInstance().getConnection(dbConfig, false); - Statement statement = connection.createStatement(); - ResultSet queryResult = statement.executeQuery(query); - MariaDbResultSetMetaData metadata = (MariaDbResultSetMetaData)queryResult.getMetaData(); - int columnCount = metadata.getColumnCount(); - - int index = 0; - List rows = new ArrayList(); - - while (queryResult.next()) { - DatabaseRow row = new DatabaseRow(); - row.setIndex(index); - List values = new ArrayList(columnCount); - for (int i = 1; i <= columnCount; i++) { - - values.add(queryResult.getString(i)); - - } - row.setValues(values); - rows.add(row); - index++; - - } - - return rows; - - } catch (SQLException e) { - logger.error("SQLException::", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - } - } - - @Override - protected String getDatabaseUrl(DatabaseConfiguration dbConfig) { - - int port = dbConfig.getDatabasePort(); - return "jdbc:" + dbConfig.getDatabaseType() + "://" + dbConfig.getDatabaseHost() - + ((port == 0) ? "" : (":" + port)) + "/" + dbConfig.getDatabaseName() + "?useSSL=" + dbConfig.isUseSSL(); - - } - - @Override - public Connection getConnection(DatabaseConfiguration dbConfig) - throws DatabaseServiceException { - // TODO Auto-generated method stub - return MariaDBConnectionManager.getInstance().getConnection(dbConfig, true); - } - - @Override - public DatabaseInfo testQuery(DatabaseConfiguration dbConfig, String query) - throws DatabaseServiceException { - Statement statement = null; - ResultSet queryResult = null; - try { - Connection connection = MySQLConnectionManager.getInstance().getConnection(dbConfig, true); - statement = connection.createStatement(); - queryResult = statement.executeQuery(query); - - DatabaseInfo dbInfo = new DatabaseInfo(); - - return dbInfo; - - } catch (SQLException e) { - logger.error("SQLException::", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - } finally { - try { - if (queryResult != null) { - queryResult.close(); - - } - if (statement != null) { - statement.close(); - - } - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - MySQLConnectionManager.getInstance().shutdown(); - } - } - -} diff --git a/extensions/database/src/com/google/refine/extension/database/model/DatabaseColumn.java b/extensions/database/src/com/google/refine/extension/database/model/DatabaseColumn.java deleted file mode 100644 index 35620146c..000000000 --- a/extensions/database/src/com/google/refine/extension/database/model/DatabaseColumn.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database.model; - -import com.google.refine.extension.database.DatabaseColumnType; - -public class DatabaseColumn { - - - private String name; - private int size; - private DatabaseColumnType type; - private String label; - - public DatabaseColumnType getType() { - return type; - } - - - - public void setType(DatabaseColumnType type) { - this.type = type; - } - - - - public String getLabel() { - return label; - } - - - - public void setLabel(String label) { - this.label = label; - } - - - public DatabaseColumn(String name, int size, DatabaseColumnType type) { - super(); - this.name = name; - this.size = size; - this.type = type; - } - - - public DatabaseColumn(String name, String label, DatabaseColumnType type, int size) { - this.name = name; - this.label = label; - this.size = size; - this.type = type; - } - - - public String getName() { - return name; - } - - - public void setName(String name) { - this.name = name; - } - - - public int getSize() { - return size; - } - - - public void setSize(int size) { - this.size = size; - } - - - - - @Override - public String toString() { - return "DatabaseColumn [name=" + name + ", size=" + size + ", type=" + type + ", label=" + label + "]"; - } - - - -} diff --git a/extensions/database/src/com/google/refine/extension/database/model/DatabaseInfo.java b/extensions/database/src/com/google/refine/extension/database/model/DatabaseInfo.java deleted file mode 100644 index c5755e9a7..000000000 --- a/extensions/database/src/com/google/refine/extension/database/model/DatabaseInfo.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database.model; - -import java.util.ArrayList; -import java.util.List; - -public class DatabaseInfo { - - private List tables; - private int dbMajorVersion; - private int dbMinorVersion; - private String dbProductVersion; - private String dbProductName; - - private ArrayList columns; - private List rows; - - public DatabaseInfo() { - // TODO Auto-generated constructor stub - } - - public List getTables() { - return tables; - } - - public void setTables(List tables) { - this.tables = tables; - } - - public void setDatabaseMajorVersion(int dbMajorVersion) { - this.dbMajorVersion = dbMajorVersion; - - } - - public void setDatabaseMinorVersion(int dbMinorVersion) { - this.dbMinorVersion = dbMinorVersion; - - } - - public void setDatabaseProductVersion(String dbProductVersion) { - this.dbProductVersion = dbProductVersion; - - } - - public void setDatabaseProductName(String dbProductName) { - this.dbProductName = dbProductName; - - } - - public int getDbMajorVersion() { - return dbMajorVersion; - } - - public void setDbMajorVersion(int dbMajorVersion) { - this.dbMajorVersion = dbMajorVersion; - } - - public int getDbMinorVersion() { - return dbMinorVersion; - } - - public void setDbMinorVersion(int dbMinorVersion) { - this.dbMinorVersion = dbMinorVersion; - } - - public String getDbProductVersion() { - return dbProductVersion; - } - - public void setDbProductVersion(String dbProductVersion) { - this.dbProductVersion = dbProductVersion; - } - - public String getDbProductName() { - return dbProductName; - } - - public void setDbProductName(String dbProductName) { - this.dbProductName = dbProductName; - } - - public void setColumns(ArrayList columns) { - this.columns = columns; - - } - - public void setRows(List rows) { - this.rows = rows; - - } - - public ArrayList getColumns() { - return columns; - } - - - public List getRows() { - return rows; - } - - - @Override - public String toString() { - return "DatabaseInfo [tables=" + tables + ", dbMajorVersion=" + dbMajorVersion + ", dbMinorVersion=" - + dbMinorVersion + ", dbProductVersion=" + dbProductVersion + ", dbProductName=" + dbProductName + "]"; - } - -} diff --git a/extensions/database/src/com/google/refine/extension/database/model/DatabaseQueryInfo.java b/extensions/database/src/com/google/refine/extension/database/model/DatabaseQueryInfo.java deleted file mode 100644 index e8f1fb8c8..000000000 --- a/extensions/database/src/com/google/refine/extension/database/model/DatabaseQueryInfo.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database.model; - -import com.google.refine.extension.database.DatabaseConfiguration; - -public class DatabaseQueryInfo { - - private DatabaseConfiguration dbConfig; - - private String query; - - public DatabaseQueryInfo(DatabaseConfiguration databaseConfig, String query) { - super(); - this.dbConfig = databaseConfig; - this.query = query; - } - - - public DatabaseConfiguration getDbConfig() { - return dbConfig; - } - - - public void setDbConfig(DatabaseConfiguration databaseConfig) { - this.dbConfig = databaseConfig; - } - - - public String getQuery() { - return query; - } - - - public void setQuery(String query) { - this.query = query; - } - - - -} diff --git a/extensions/database/src/com/google/refine/extension/database/model/DatabaseRow.java b/extensions/database/src/com/google/refine/extension/database/model/DatabaseRow.java deleted file mode 100644 index 3fd6b9979..000000000 --- a/extensions/database/src/com/google/refine/extension/database/model/DatabaseRow.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database.model; - -import java.util.List; - -public class DatabaseRow { - - private int index; - - private List values; - - - public int getIndex() { - return index; - } - - - public void setIndex(int index) { - this.index = index; - } - - - public List getValues() { - return values; - } - - - public void setValues(List values) { - this.values = values; - } - - - - -} diff --git a/extensions/database/src/com/google/refine/extension/database/model/DatabaseTable.java b/extensions/database/src/com/google/refine/extension/database/model/DatabaseTable.java deleted file mode 100644 index c7758de27..000000000 --- a/extensions/database/src/com/google/refine/extension/database/model/DatabaseTable.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database.model; - -import java.util.ArrayList; -import java.util.List; - -public class DatabaseTable { - - - private List columns = new ArrayList(); - - private String name; - - - public DatabaseTable(String name) { - this.name = name; - } - - - public List getColumns() { - return columns; - } - - - public void setColumns(List columns) { - this.columns = columns; - } - - - public String getName() { - return name; - } - - - public void setName(String name) { - this.name = name; - } - - @Override - public String toString() { - return "DatabaseTable [columns=" + columns + ", name=" + name + "]"; - } - - - -} diff --git a/extensions/database/src/com/google/refine/extension/database/mysql/MySQLConnectionManager.java b/extensions/database/src/com/google/refine/extension/database/mysql/MySQLConnectionManager.java deleted file mode 100644 index 9e81fd264..000000000 --- a/extensions/database/src/com/google/refine/extension/database/mysql/MySQLConnectionManager.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database.mysql; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseServiceException; -import com.google.refine.extension.database.SQLType; - - -public class MySQLConnectionManager { - - private static final Logger logger = LoggerFactory.getLogger("MySQLConnectionManager"); - private Connection connection; - private SQLType type; - - private static MySQLConnectionManager instance; - - /** - * - * @param type - * @param databaseConfiguration - * @throws SQLException - */ - private MySQLConnectionManager() { - type = SQLType.forName(MySQLDatabaseService.DB_NAME); - - } - - - - /** - * Create a new instance of this connection manager. - * - * @return an instance of the manager - * - * @throws DatabaseServiceException - */ - public static MySQLConnectionManager getInstance() throws DatabaseServiceException { - if (instance == null) { - logger.debug("::Creating new MySQLConnectionManager ::"); - instance = new MySQLConnectionManager(); - - } - return instance; - } - - - /** - * Get the SQL Database type. - * - * @return the type - */ - public SQLType getType() { - return this.type; - } - - /** - * testConnection - * @param databaseConfiguration - * @return - */ - public boolean testConnection(DatabaseConfiguration databaseConfiguration) throws DatabaseServiceException{ - - try { - boolean connResult = false; - - Connection conn = getConnection(databaseConfiguration, true); - if(conn != null) { - connResult = true; - conn.close(); - } - - return connResult; - - } - catch (SQLException e) { - logger.error("Test connection Failed!", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - } - - } - - /** - * Get a connection form the connection pool. - * - * @return connection from the pool - */ - public Connection getConnection(DatabaseConfiguration databaseConfiguration, boolean forceNewConnection) throws DatabaseServiceException{ - try { - - if (connection != null && !forceNewConnection) { - //logger.info("connection closed::{}", connection.isClosed()); - if (!connection.isClosed()) { - if(logger.isDebugEnabled()){ - logger.debug("Returning existing connection::{}", connection); - } - - return connection; - } - } - String dbURL = getDatabaseUrl(databaseConfiguration); - Class.forName(type.getClassPath()); - - //logger.info("*** type.getClassPath() ::{}, {}**** ", type.getClassPath()); - - DriverManager.setLoginTimeout(10); - - connection = DriverManager.getConnection(dbURL, databaseConfiguration.getDatabaseUser(), - databaseConfiguration.getDatabasePassword()); - - if(logger.isDebugEnabled()) { - logger.debug("*** Acquired New connection for ::{} **** ", dbURL); - } - - - return connection; - - - } catch (ClassNotFoundException e) { - logger.error("Jdbc Driver not found", e); - throw new DatabaseServiceException(e.getMessage()); - } catch (SQLException e) { - logger.error("SQLException::Couldn't get a Connection!", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - } - } - - - public void shutdown() { - - if (connection != null) { - try { - connection.close(); - } - catch (SQLException e) { - logger.warn("Non-Managed connection could not be closed. Whoops!", e); - } - } - - } - - - private String getDatabaseUrl(DatabaseConfiguration dbConfig) { - - int port = dbConfig.getDatabasePort(); - return "jdbc:" + dbConfig.getDatabaseType() + "://" + dbConfig.getDatabaseHost() - + ((port == 0) ? "" : (":" + port)) + "/" + dbConfig.getDatabaseName() + "?useSSL=" + dbConfig.isUseSSL(); - - } -} diff --git a/extensions/database/src/com/google/refine/extension/database/mysql/MySQLDatabaseService.java b/extensions/database/src/com/google/refine/extension/database/mysql/MySQLDatabaseService.java deleted file mode 100644 index 503936e16..000000000 --- a/extensions/database/src/com/google/refine/extension/database/mysql/MySQLDatabaseService.java +++ /dev/null @@ -1,341 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database.mysql; - -import java.sql.Connection; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.List; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseService; -import com.google.refine.extension.database.DatabaseServiceException; -import com.google.refine.extension.database.DatabaseUtils; -import com.google.refine.extension.database.SQLType; -import com.google.refine.extension.database.model.DatabaseColumn; -import com.google.refine.extension.database.model.DatabaseInfo; -import com.google.refine.extension.database.model.DatabaseRow; -//import com.mysql.jdbc.ResultSetMetaData; - -public class MySQLDatabaseService extends DatabaseService { - - - private static final Logger logger = LoggerFactory.getLogger("MySQLDatabaseService"); - - public static final String DB_NAME = "mysql"; - public static final String DB_DRIVER = "com.mysql.jdbc.Driver"; - - private static MySQLDatabaseService instance; - - private MySQLDatabaseService() { - } - - public static MySQLDatabaseService getInstance() { - if (instance == null) { - SQLType.registerSQLDriver(DB_NAME, DB_DRIVER, false); - instance = new MySQLDatabaseService(); - if(logger.isDebugEnabled()) { - logger.debug("MySQLDatabaseService Instance: {}", instance); - } - } - return instance; - } - - @Override - public boolean testConnection(DatabaseConfiguration dbConfig) throws DatabaseServiceException{ - return MySQLConnectionManager.getInstance().testConnection(dbConfig); - - } - - @Override - public DatabaseInfo connect(DatabaseConfiguration dbConfig) throws DatabaseServiceException{ - return getMetadata(dbConfig); - } - - - @Override - public DatabaseInfo executeQuery(DatabaseConfiguration dbConfig, String query) throws DatabaseServiceException{ - try { - Connection connection = MySQLConnectionManager.getInstance().getConnection(dbConfig, false); - Statement statement = connection.createStatement(); - ResultSet queryResult = statement.executeQuery(query); - java.sql.ResultSetMetaData metadata = queryResult.getMetaData(); - - if(metadata instanceof com.mysql.jdbc.ResultSetMetaData) { - metadata = (com.mysql.jdbc.ResultSetMetaData)metadata; - } - //ResultSetMetaData metadata = (ResultSetMetaData)queryResult.getMetaData(); - - int columnCount = metadata.getColumnCount(); - ArrayList columns = new ArrayList(columnCount); - - for (int i = 1; i <= columnCount; i++) { - DatabaseColumn dc = new DatabaseColumn( - metadata.getColumnName(i), - metadata.getColumnLabel(i), - DatabaseUtils.getDbColumnType(metadata.getColumnType(i)), - metadata.getColumnDisplaySize(i)); - columns.add(dc); - } - int index = 0; - List rows = new ArrayList(); - - while (queryResult.next()) { - DatabaseRow row = new DatabaseRow(); - row.setIndex(index); - List values = new ArrayList(columnCount); - for (int i = 1; i <= columnCount; i++) { - - values.add(queryResult.getString(i)); - - } - row.setValues(values); - rows.add(row); - index++; - - } - - DatabaseInfo dbInfo = new DatabaseInfo(); - dbInfo.setColumns(columns); - dbInfo.setRows(rows); - return dbInfo; - - } catch (SQLException e) { - logger.error("SQLException::", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - }finally { - MySQLConnectionManager.getInstance().shutdown(); - } - } - - /** - * - * @param connectionInfo - * @return - * @throws DatabaseServiceException - */ - private DatabaseInfo getMetadata(DatabaseConfiguration connectionInfo) throws DatabaseServiceException { - - try { - Connection connection = MySQLConnectionManager.getInstance().getConnection(connectionInfo, true); - if(connection != null) { - java.sql.DatabaseMetaData metadata; - - metadata = connection.getMetaData(); - - int dbMajorVersion = metadata.getDatabaseMajorVersion(); - int dbMinorVersion = metadata.getDatabaseMinorVersion(); - String dbProductVersion = metadata.getDatabaseProductVersion(); - String dbProductName = metadata.getDatabaseProductName(); - DatabaseInfo dbInfo = new DatabaseInfo(); - - dbInfo.setDatabaseMajorVersion(dbMajorVersion); - dbInfo.setDatabaseMinorVersion(dbMinorVersion); - dbInfo.setDatabaseProductVersion(dbProductVersion); - dbInfo.setDatabaseProductName(dbProductName); - return dbInfo; - } - - } catch (SQLException e) { - logger.error("SQLException::", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - } - - - return null; - - } - - @Override - public String buildLimitQuery(Integer limit, Integer offset, String query) { - if(logger.isDebugEnabled()) { - logger.info( "<<< original input query::{} >>>" , query ); - } - - final int len = query.length(); - String parsedQuery = len > 0 && query.endsWith(";") ? query.substring(0, len - 1) : query; - - - StringBuilder sb = new StringBuilder(); - sb.append(parsedQuery); - - if(limit != null) { - sb.append(" LIMIT" + " " + limit); - } - - if(offset != null) { - sb.append(" OFFSET" + " " + offset); - } - sb.append(";"); - String parsedQueryOut = sb.toString(); - - if(logger.isDebugEnabled()) { - logger.info( "<<>>" , parsedQueryOut ); - } - - return parsedQueryOut; - } - - @Override - public ArrayList getColumns(DatabaseConfiguration dbConfig, String query) throws DatabaseServiceException{ - - try { - Connection connection = MySQLConnectionManager.getInstance().getConnection(dbConfig, true); - Statement statement = connection.createStatement(); - - ResultSet queryResult = statement.executeQuery(query); - java.sql.ResultSetMetaData metadata = queryResult.getMetaData(); - if(metadata instanceof com.mysql.jdbc.ResultSetMetaData) { - metadata = (com.mysql.jdbc.ResultSetMetaData)metadata; - } - - //ResultSetMetaData metadata = (ResultSetMetaData) queryResult.getMetaData(); - int columnCount = metadata.getColumnCount(); - ArrayList columns = new ArrayList(columnCount); - - for (int i = 1; i <= columnCount; i++) { - DatabaseColumn dc = new DatabaseColumn(metadata.getColumnName(i), metadata.getColumnLabel(i), - DatabaseUtils.getDbColumnType(metadata.getColumnType(i)), metadata.getColumnDisplaySize(i)); - columns.add(dc); - } - - return columns; - - } catch (SQLException e) { - logger.error("SQLException::", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - } - - - } - - @Override - public List getRows(DatabaseConfiguration dbConfig, String query) - throws DatabaseServiceException { - - try { - Connection connection = MySQLConnectionManager.getInstance().getConnection(dbConfig, false); - - Statement statement = connection.createStatement(); - statement.setFetchSize(10); - ResultSet queryResult = statement.executeQuery(query); - - java.sql.ResultSetMetaData metadata = queryResult.getMetaData(); - if(metadata instanceof com.mysql.jdbc.ResultSetMetaData) { - metadata = (com.mysql.jdbc.ResultSetMetaData)metadata; - } - //logger.info("metadata class::" + metadata.getClass()); - - int columnCount = metadata.getColumnCount(); - - int index = 0; - List rows = new ArrayList(); - - while (queryResult.next()) { - DatabaseRow row = new DatabaseRow(); - row.setIndex(index); - List values = new ArrayList(columnCount); - for (int i = 1; i <= columnCount; i++) { - - values.add(queryResult.getString(i)); - - } - row.setValues(values); - rows.add(row); - index++; - - } - - return rows; - - } catch (SQLException e) { - logger.error("SQLException::", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - } - } - - @Override - protected String getDatabaseUrl(DatabaseConfiguration dbConfig) { - - int port = dbConfig.getDatabasePort(); - return "jdbc:" + dbConfig.getDatabaseType() + "://" + dbConfig.getDatabaseHost() - + ((port == 0) ? "" : (":" + port)) + "/" + dbConfig.getDatabaseName() + "?useSSL=" + dbConfig.isUseSSL(); - - } - - - @Override - public Connection getConnection(DatabaseConfiguration dbConfig) - throws DatabaseServiceException { - // TODO Auto-generated method stub - return MySQLConnectionManager.getInstance().getConnection(dbConfig, true); - } - - @Override - public DatabaseInfo testQuery(DatabaseConfiguration dbConfig, String query) - throws DatabaseServiceException { - Statement statement = null; - ResultSet queryResult = null; - try { - Connection connection = MySQLConnectionManager.getInstance().getConnection(dbConfig, true); - statement = connection.createStatement(); - queryResult = statement.executeQuery(query); - - DatabaseInfo dbInfo = new DatabaseInfo(); - - return dbInfo; - - } catch (SQLException e) { - logger.error("SQLException::", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - } finally { - try { - if (queryResult != null) { - queryResult.close(); - - } - if (statement != null) { - statement.close(); - - } - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - MySQLConnectionManager.getInstance().shutdown(); - } - } - - -} diff --git a/extensions/database/src/com/google/refine/extension/database/pgsql/PgSQLConnectionManager.java b/extensions/database/src/com/google/refine/extension/database/pgsql/PgSQLConnectionManager.java deleted file mode 100644 index bef6c9a69..000000000 --- a/extensions/database/src/com/google/refine/extension/database/pgsql/PgSQLConnectionManager.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database.pgsql; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseServiceException; -import com.google.refine.extension.database.SQLType; - - - -public class PgSQLConnectionManager { - - private static final Logger logger = LoggerFactory.getLogger("PgSQLConnectionManager"); - private Connection connection; - private SQLType type; - - private static PgSQLConnectionManager instance; - - - - /** - * - * @param type - * @param databaseConfiguration - * @throws SQLException - */ - private PgSQLConnectionManager() { - type = SQLType.forName(PgSQLDatabaseService.DB_NAME); - - } - - - - - /** - * Create a new instance of this connection manager. - * - * @return an instance of the manager - * - * @throws DatabaseServiceException - */ - public static PgSQLConnectionManager getInstance() throws DatabaseServiceException { - if (instance == null) { - if(logger.isDebugEnabled()) { - logger.debug("::Creating new PgSQL ConnectionManager ::"); - } - - instance = new PgSQLConnectionManager(); - - } - return instance; - } - - - /** - * Get the SQL Database type. - * - * @return the type - */ - public SQLType getType() { - return this.type; - } - - /** - * testConnection - * @param databaseConfiguration - * @return - */ - public boolean testConnection(DatabaseConfiguration databaseConfiguration) throws DatabaseServiceException{ - - try { - boolean connResult = false; - - Connection conn = getConnection(databaseConfiguration, true); - if(conn != null) { - connResult = true; - conn.close(); - } - - return connResult; - - } - catch (SQLException e) { - logger.error("Test connection Failed!", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - } - - } - - /** - * Get a connection form the connection pool. - * - * @return connection from the pool - */ - public Connection getConnection(DatabaseConfiguration databaseConfiguration, boolean forceNewConnection) throws DatabaseServiceException{ - try { - - // logger.info("connection::{}, forceNewConnection: {}", connection, forceNewConnection); - - if (connection != null && !forceNewConnection) { - // logger.info("connection closed::{}", connection.isClosed()); - if (!connection.isClosed()) { - if(logger.isDebugEnabled()){ - logger.debug("Returning existing connection::{}", connection); - } - return connection; - } - } - - Class.forName(type.getClassPath()); - DriverManager.setLoginTimeout(10); - String dbURL = getDatabaseUrl(databaseConfiguration); - connection = DriverManager.getConnection(dbURL, databaseConfiguration.getDatabaseUser(), - databaseConfiguration.getDatabasePassword()); - - logger.debug("*** Acquired New connection for ::{} **** ", dbURL); - - return connection; - - - } catch (ClassNotFoundException e) { - logger.error("Jdbc Driver not found", e); - throw new DatabaseServiceException(e.getMessage()); - } catch (SQLException e) { - logger.error("SQLException::Couldn't get a Connection!", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - } - } - - - public void shutdown() { - - if (connection != null) { - try { - connection.close(); - } - catch (SQLException e) { - logger.warn("Non-Managed connection could not be closed. Whoops!", e); - } - } - - } - - - private static String getDatabaseUrl(DatabaseConfiguration dbConfig) { - - int port = dbConfig.getDatabasePort(); - return "jdbc:" + dbConfig.getDatabaseType().toLowerCase() + "://" + dbConfig.getDatabaseHost() - + ((port == 0) ? "" : (":" + port)) + "/" + dbConfig.getDatabaseName(); - - } -} diff --git a/extensions/database/src/com/google/refine/extension/database/pgsql/PgSQLDatabaseService.java b/extensions/database/src/com/google/refine/extension/database/pgsql/PgSQLDatabaseService.java deleted file mode 100644 index 9a6308373..000000000 --- a/extensions/database/src/com/google/refine/extension/database/pgsql/PgSQLDatabaseService.java +++ /dev/null @@ -1,321 +0,0 @@ -/* - * Copyright (c) 2017, Tony Opara - * 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 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 HOLDER 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.extension.database.pgsql; - -import java.sql.Connection; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.List; - -import org.postgresql.jdbc.PgResultSetMetaData; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseService; -import com.google.refine.extension.database.DatabaseServiceException; -import com.google.refine.extension.database.DatabaseUtils; -import com.google.refine.extension.database.SQLType; -import com.google.refine.extension.database.model.DatabaseColumn; -import com.google.refine.extension.database.model.DatabaseInfo; -import com.google.refine.extension.database.model.DatabaseRow; -import com.google.refine.extension.database.mysql.MySQLConnectionManager; - -public class PgSQLDatabaseService extends DatabaseService { - - private static final Logger logger = LoggerFactory.getLogger("PgSQLDatabaseService"); - - public static final String DB_NAME = "postgresql"; - public static final String DB_DRIVER = "org.postgresql.Driver"; - - private static PgSQLDatabaseService instance; - - private PgSQLDatabaseService() { - } - - public static PgSQLDatabaseService getInstance() { - if (instance == null) { - SQLType.registerSQLDriver(DB_NAME, DB_DRIVER); - instance = new PgSQLDatabaseService(); - if(logger.isDebugEnabled()) { - logger.debug("PgSQLDatabaseService Instance: {}", instance); - } - } - return instance; - } - - - @Override - public boolean testConnection(DatabaseConfiguration dbConfig) throws DatabaseServiceException{ - return PgSQLConnectionManager.getInstance().testConnection(dbConfig); - - } - - @Override - public DatabaseInfo connect(DatabaseConfiguration dbConfig) throws DatabaseServiceException{ - return getMetadata(dbConfig); - } - - - @Override - public DatabaseInfo executeQuery(DatabaseConfiguration dbConfig, String query) throws DatabaseServiceException{ - - - try { - Connection connection = PgSQLConnectionManager.getInstance().getConnection(dbConfig, false); - Statement statement = connection.createStatement(); - ResultSet queryResult = statement.executeQuery(query); - PgResultSetMetaData metadata = (PgResultSetMetaData)queryResult.getMetaData(); - int columnCount = metadata.getColumnCount(); - ArrayList columns = new ArrayList(columnCount); - - for (int i = 1; i <= columnCount; i++) { - DatabaseColumn dc = new DatabaseColumn( - metadata.getColumnName(i), - metadata.getColumnLabel(i), - DatabaseUtils.getDbColumnType(metadata.getColumnType(i)), - metadata.getColumnDisplaySize(i)); - columns.add(dc); - } - int index = 0; - List rows = new ArrayList(); - - while (queryResult.next()) { - DatabaseRow row = new DatabaseRow(); - row.setIndex(index); - List values = new ArrayList(columnCount); - for (int i = 1; i <= columnCount; i++) { - - values.add(queryResult.getString(i)); - - } - row.setValues(values); - rows.add(row); - index++; - - } - - DatabaseInfo dbInfo = new DatabaseInfo(); - dbInfo.setColumns(columns); - dbInfo.setRows(rows); - return dbInfo; - - } catch (SQLException e) { - logger.error("SQLException::", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - }finally { - PgSQLConnectionManager.getInstance().shutdown(); - } - } - - /** - * - * @param connectionInfo - * @return - * @throws DatabaseServiceException - */ - private DatabaseInfo getMetadata(DatabaseConfiguration connectionInfo) throws DatabaseServiceException { - - - - try { - Connection connection = PgSQLConnectionManager.getInstance().getConnection(connectionInfo, true); - if(connection != null) { - java.sql.DatabaseMetaData metadata; - - metadata = connection.getMetaData(); - - int dbMajorVersion = metadata.getDatabaseMajorVersion(); - int dbMinorVersion = metadata.getDatabaseMinorVersion(); - String dbProductVersion = metadata.getDatabaseProductVersion(); - String dbProductName = metadata.getDatabaseProductName(); - DatabaseInfo dbInfo = new DatabaseInfo(); - - dbInfo.setDatabaseMajorVersion(dbMajorVersion); - dbInfo.setDatabaseMinorVersion(dbMinorVersion); - dbInfo.setDatabaseProductVersion(dbProductVersion); - dbInfo.setDatabaseProductName(dbProductName); - return dbInfo; - } - - } catch (SQLException e) { - logger.error("SQLException::", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - } - - return null; - } - - @Override - public String buildLimitQuery(Integer limit, Integer offset, String query) { - if(logger.isDebugEnabled()) { - logger.debug( "<<< original input query::{} >>>" , query ); - } - - final int len = query.length(); - String parsedQuery = len > 0 && query.endsWith(";") ? query.substring(0, len - 1) : query; - - - StringBuilder sb = new StringBuilder(); - sb.append(parsedQuery); - - if(limit != null) { - sb.append(" LIMIT" + " " + limit); - } - - if(offset != null) { - sb.append(" OFFSET" + " " + offset); - } - sb.append(";"); - String parsedQueryOut = sb.toString(); - - if(logger.isDebugEnabled()) { - logger.debug( "<<>>" , parsedQueryOut ); - } - - return parsedQueryOut; - } - - @Override - public ArrayList getColumns(DatabaseConfiguration dbConfig, String query) throws DatabaseServiceException{ - - try { - Connection connection = PgSQLConnectionManager.getInstance().getConnection(dbConfig, true); - Statement statement = connection.createStatement(); - - ResultSet queryResult = statement.executeQuery(query); - PgResultSetMetaData metadata = (PgResultSetMetaData) queryResult.getMetaData(); - int columnCount = metadata.getColumnCount(); - ArrayList columns = new ArrayList(columnCount); - - for (int i = 1; i <= columnCount; i++) { - DatabaseColumn dc = new DatabaseColumn(metadata.getColumnName(i), metadata.getColumnLabel(i), - DatabaseUtils.getDbColumnType(metadata.getColumnType(i)), metadata.getColumnDisplaySize(i)); - columns.add(dc); - } - - return columns; - - } catch (SQLException e) { - logger.error("SQLException::", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - } - - - } - - @Override - public List getRows(DatabaseConfiguration dbConfig, String query) - throws DatabaseServiceException { - - try { - Connection connection = PgSQLConnectionManager.getInstance().getConnection(dbConfig, false); - Statement statement = connection.createStatement(); - statement.setFetchSize(10); - ResultSet queryResult = statement.executeQuery(query); - PgResultSetMetaData metadata = (PgResultSetMetaData)queryResult.getMetaData(); - int columnCount = metadata.getColumnCount(); - - int index = 0; - List rows = new ArrayList(); - - while (queryResult.next()) { - DatabaseRow row = new DatabaseRow(); - row.setIndex(index); - List values = new ArrayList(columnCount); - for (int i = 1; i <= columnCount; i++) { - values.add(queryResult.getString(i)); - } - row.setValues(values); - rows.add(row); - index++; - - } - - return rows; - - } catch (SQLException e) { - logger.error("SQLException::{}::{}", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - } - } - - @Override - protected String getDatabaseUrl(DatabaseConfiguration dbConfig) { - - int port = dbConfig.getDatabasePort(); - return "jdbc:" + dbConfig.getDatabaseType() + "://" + dbConfig.getDatabaseHost() - + ((port == 0) ? "" : (":" + port)) + "/" + dbConfig.getDatabaseName() + "?useSSL=" + dbConfig.isUseSSL(); - - } - - @Override - public Connection getConnection(DatabaseConfiguration dbConfig) - throws DatabaseServiceException { - return PgSQLConnectionManager.getInstance().getConnection(dbConfig, true); - } - - @Override - public DatabaseInfo testQuery(DatabaseConfiguration dbConfig, String query) - throws DatabaseServiceException { - Statement statement = null; - ResultSet queryResult = null; - try { - Connection connection = MySQLConnectionManager.getInstance().getConnection(dbConfig, true); - statement = connection.createStatement(); - queryResult = statement.executeQuery(query); - - DatabaseInfo dbInfo = new DatabaseInfo(); - - return dbInfo; - - } catch (SQLException e) { - logger.error("SQLException::", e); - throw new DatabaseServiceException(true, e.getSQLState(), e.getErrorCode(), e.getMessage()); - } finally { - try { - if (queryResult != null) { - queryResult.close(); - - } - if (statement != null) { - statement.close(); - - } - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - //MySQLConnectionManager.getInstance().shutdown(); - } - } - -} diff --git a/extensions/database/test/com/google/refine/extension/database/DBExtensionTestUtils.java b/extensions/database/test/com/google/refine/extension/database/DBExtensionTestUtils.java deleted file mode 100644 index bc06afed6..000000000 --- a/extensions/database/test/com/google/refine/extension/database/DBExtensionTestUtils.java +++ /dev/null @@ -1,456 +0,0 @@ -package com.google.refine.extension.database; - -import java.io.File; -import java.io.IOException; -import java.sql.Connection; -import java.sql.DatabaseMetaData; -import java.sql.Date; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.HashMap; -import java.util.Map; -import java.util.Random; - -import org.apache.commons.lang.text.StrSubstitutor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class DBExtensionTestUtils { - - private static final Logger logger = LoggerFactory.getLogger("DBExtensionTestUtils"); - - private static final String MYSQL_DB_NAME = "mysql"; - private static final String DEFAULT_MYSQL_HOST = "127.0.0.1"; - private static final int DEFAULT_MYSQL_PORT = 3306; - private static final String DEFAULT_MYSQL_USER = "root"; - private static final String DEFAULT_MYSQL_PASSWORD = "secret"; - private static final String DEFAULT_MYSQL_DB_NAME = "testdb"; - - private static final String PGSQL_DB_NAME = "postgresql"; - private static final String DEFAULT_PGSQL_HOST = "127.0.0.1"; - private static final int DEFAULT_PGSQL_PORT = 5432; - private static final String DEFAULT_PGSQL_USER = "postgres"; - private static final String DEFAULT_PGSQL_PASSWORD = ""; - private static final String DEFAULT_PGSQL_DB_NAME = "openrefine"; - - private static final String DEFAULT_TEST_TABLE = "test_data"; - - private static final int SAMPLE_SIZE = 500000; - private static final int BATCH_SIZE = 1000; - - private static Random rand = new Random(); - - private Map mncMap; - private Map mccMap; - - - /** - * Create Test Table with one row of Data - * @param dbConfig DatabaseConfiguration to test - * @param tableName - */ - public static void initTestData(DatabaseConfiguration dbConfig, String tableName) { - - Statement stmt = null; - Connection conn = null; - try { - DatabaseService dbService = DatabaseService.get(dbConfig.getDatabaseType()); - conn = dbService.getConnection(dbConfig); - stmt = conn.createStatement(); - - DatabaseMetaData dbm = conn.getMetaData(); - // check if "employee" table is there - ResultSet tables = dbm.getTables(null, null, tableName, null); - if (tables.next()) { - stmt.executeUpdate("DROP TABLE " + tableName); - //System.out.println("Drop Table Result::" + dropResult); - } - - String createSQL = " CREATE TABLE " + tableName + " ( " - + " ID INT NOT NULL, " - + " NAME VARCHAR (20) NOT NULL, " - + " CITY VARCHAR (20) NOT NULL," - + " PRIMARY KEY (ID) );"; - - - stmt.executeUpdate(createSQL); - //System.out.println("Create Table Result::" + createResult); - - String insertTableSQL = "INSERT INTO " + tableName - + "(ID, NAME, CITY) " + "VALUES" - + "(1,'frank lens','Dallas')"; - - stmt.executeUpdate(insertTableSQL); - // System.out.println("Insert Data Result::" + insertResult); - - logger.info("Database Test Init Data Created!!!"); - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - - } finally { - if(stmt != null) { - try { - stmt.close(); - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - if(conn != null) { - try { - conn.close(); - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - } - - } - - - public static void initTestData(DatabaseConfiguration dbConfig) { - - Statement stmt = null; - Connection conn = null; - try { - DatabaseService dbService = DatabaseService.get(dbConfig.getDatabaseType()); - conn = dbService.getConnection(dbConfig); - stmt = conn.createStatement(); - - DatabaseMetaData dbm = conn.getMetaData(); - // check if "employee" table is there - ResultSet tables = dbm.getTables(null, null, DEFAULT_TEST_TABLE, null); - if (tables.next()) { - stmt.executeUpdate("DROP TABLE " + DEFAULT_TEST_TABLE); - //System.out.println("Drop Table Result::" + dropResult); - } - - String createSQL = " CREATE TABLE TEST_DATA( " - + " ID INT NOT NULL, " - + " NAME VARCHAR (20) NOT NULL, " - + " CITY VARCHAR (20) NOT NULL," - + " PRIMARY KEY (ID) );"; - - - stmt.executeUpdate(createSQL); - //System.out.println("Create Table Result::" + createResult); - - String insertTableSQL = "INSERT INTO TEST_DATA" - + "(ID, NAME, CITY) " + "VALUES" - + "(1,'frank lens','Dallas')"; - - stmt.executeUpdate(insertTableSQL); - // System.out.println("Insert Data Result::" + insertResult); - - logger.info("Database Test Init Data Created!!!"); - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - - } finally { - if(stmt != null) { - try { - stmt.close(); - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - if(conn != null) { - try { - conn.close(); - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - } - - } - - /** - * CREATE test data in MySQL - * Table name: test_data - * @param sampleSize - * @param batchSize - */ - public void generateMySQLTestData(int sampleSize, int batchSize) { - mncMap = new HashMap(); - mccMap = new HashMap(); - mccMap.put(0, 302); - mccMap.put(1, 311); - mccMap.put(2, 730); - mccMap.put(1, 622); - - mncMap.put(0, 006); - mncMap.put(1, 140); - mncMap.put(2, 380); - mncMap.put(3, 710); - - DatabaseConfiguration dc = new DatabaseConfiguration(); - dc.setDatabaseHost(DEFAULT_MYSQL_HOST); - dc.setDatabaseName(DEFAULT_MYSQL_DB_NAME); - dc.setDatabasePassword(DEFAULT_MYSQL_PASSWORD); - dc.setDatabasePort(DEFAULT_MYSQL_PORT); - dc.setDatabaseType(MYSQL_DB_NAME); - dc.setDatabaseUser(DEFAULT_MYSQL_USER); - dc.setUseSSL(false); - - String truncateTableSQL = "TRUNCATE test_data"; - - String insertTableSQL = "INSERT INTO test_data(" - + "id, ue_id, start_time, end_date, bytes_upload, bytes_download, cell_id, mcc, mnc, lac, imei)" - + " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"; - - Connection conn; - try { - conn = DatabaseService.get(MYSQL_DB_NAME).getConnection(dc); - - Statement truncateStmt = conn.createStatement(); - int result = truncateStmt.executeUpdate(truncateTableSQL); - System.out.println("Truncate Table Result::" + result); - truncateStmt.close(); - - - conn.setAutoCommit(false); - - PreparedStatement stmt = conn.prepareStatement(insertTableSQL); - - int counter=1; - for (int i = 0; i < sampleSize; i++) { - stmt.setLong(1, i); - stmt.setString(2, getNextUeId()); - stmt.setDate(3, getNextStartDate()); - stmt.setDate(4, getNextEndDate()); - stmt.setInt(5, rand.nextInt()); - stmt.setInt(6, rand.nextInt()); - stmt.setInt(7, rand.nextInt(10)); - stmt.setInt(8, getMCC()); - stmt.setInt(9, getMNC()); - stmt.setInt(10, rand.nextInt(100)); - stmt.setString(11, getNextIMEI()); - - stmt.addBatch(); - - //Execute batch of 1000 records - if(i%batchSize==0){ - stmt.executeBatch(); - conn.commit(); - System.out.println("Batch "+(counter++)+" executed successfully"); - } - } - //execute final batch - stmt.executeBatch(); - System.out.println("Final Batch Executed "+(counter++)+" executed successfully"); - conn.commit(); - conn.close(); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - - /** - * - * @param sampleSize - * @param batchSize - */ - public void generatePgSQLTestData(int sampleSize, int batchSize) { - mncMap = new HashMap(); - mccMap = new HashMap(); - mccMap.put(0, 302); - mccMap.put(1, 311); - mccMap.put(2, 730); - mccMap.put(1, 622); - - mncMap.put(0, 006); - mncMap.put(1, 140); - mncMap.put(2, 380); - mncMap.put(3, 710); - - DatabaseConfiguration dc = new DatabaseConfiguration(); - dc.setDatabaseHost(DEFAULT_PGSQL_HOST); - dc.setDatabaseName(DEFAULT_PGSQL_DB_NAME); - dc.setDatabasePassword(DEFAULT_PGSQL_PASSWORD); - dc.setDatabasePort(DEFAULT_PGSQL_PORT); - dc.setDatabaseType(PGSQL_DB_NAME); - dc.setDatabaseUser(DEFAULT_PGSQL_USER); - dc.setUseSSL(false); - - String truncateTableSQL = "TRUNCATE public.test_data"; - - String insertTableSQL = "INSERT INTO public.test_data(" - + "id, ue_id, start_time, end_date, bytes_upload, bytes_download, cell_id, mcc, mnc, lac, imei)" - + " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"; - - Connection conn; - try { - conn = DatabaseService.get(PGSQL_DB_NAME).getConnection(dc); - - Statement truncateStmt = conn.createStatement(); - int result = truncateStmt.executeUpdate(truncateTableSQL); - System.out.println("Truncate Table Result::" + result); - truncateStmt.close(); - - - conn.setAutoCommit(false); - - PreparedStatement stmt = conn.prepareStatement(insertTableSQL); - - int counter=1; - for (int i = 0; i < sampleSize; i++) { - stmt.setLong(1, i); - stmt.setString(2, getNextUeId()); - stmt.setDate(3, getNextStartDate()); - stmt.setDate(4, getNextEndDate()); - stmt.setInt(5, rand.nextInt()); - stmt.setInt(6, rand.nextInt()); - stmt.setInt(7, rand.nextInt(10)); - stmt.setInt(8, getMCC()); - stmt.setInt(9, getMNC()); - stmt.setInt(10, rand.nextInt(100)); - stmt.setString(11, getNextIMEI()); - - stmt.addBatch(); - - //Execute batch of 1000 records - if(i%batchSize==0){ - stmt.executeBatch(); - conn.commit(); - System.out.println("Batch "+(counter++)+" executed successfully"); - } - } - //execute final batch - stmt.executeBatch(); - System.out.println("Final Batch Executed "+(counter++)+" executed successfully"); - conn.commit(); - conn.close(); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - - private String getNextIMEI() { - int n = 1000000000 + rand.nextInt(900000000); - return "" + n; - } - - - - private int getMNC() { - - return mncMap.get(rand.nextInt(3)); - } - - private int getMCC() { - - return mccMap.get(rand.nextInt(3)); - } - - private Date getNextEndDate() { - - return new Date(System.currentTimeMillis() + 1); - } - - private Date getNextStartDate() { - - return new Date(System.currentTimeMillis()); - } - - private String getNextUeId() { - - int n = 300000000 + rand.nextInt(900000000); - - return "" + n; - } - - public static void main(String[] args) { - DBExtensionTestUtils testUtil = new DBExtensionTestUtils(); - testUtil.generatePgSQLTestData(SAMPLE_SIZE, BATCH_SIZE); - // testUtil.generateMySQLTestData(); - } - - - public static void cleanUpTestData(DatabaseConfiguration dbConfig) { - Statement stmt = null; - Connection conn = null; - try { - DatabaseService dbService = DatabaseService.get(dbConfig.getDatabaseType()); - conn = dbService.getConnection(dbConfig); - stmt = conn.createStatement(); - - DatabaseMetaData dbm = conn.getMetaData(); - // check if "employee" table is there - ResultSet tables = dbm.getTables(null, null, DEFAULT_TEST_TABLE, null); - if (tables.next()) { - stmt.executeUpdate("DROP TABLE " + DEFAULT_TEST_TABLE); - //System.out.println("Drop Table Result::" + dropResult); - } - - logger.info("Database Test Cleanup Done!!!"); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } finally { - if(stmt != null) { - try { - stmt.close(); - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - if(conn != null) { - try { - conn.close(); - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - } - - } - - public static File createTempDirectory(String name) - throws IOException { - File dir = File.createTempFile(name, ""); - dir.delete(); - dir.mkdir(); - return dir; - } - - public static String getJDBCUrl(DatabaseConfiguration dbConfig) { - Map substitutes = new HashMap(); - substitutes.put("dbType", dbConfig.getDatabaseType()); - substitutes.put("host", dbConfig.getDatabaseHost()); - substitutes.put("port", "" + dbConfig.getDatabasePort()); - substitutes.put("dbName", dbConfig.getDatabaseName()); - substitutes.put("useSSL", dbConfig.isUseSSL()); - String urlTemplate = "jdbc:${dbType}://${host}:${port}/${dbName}?useSSL=${useSSL}"; - StrSubstitutor strSub = new StrSubstitutor(substitutes); - return strSub.replace(urlTemplate); - } - -} diff --git a/extensions/database/test/com/google/refine/extension/database/DBExtensionTests.java b/extensions/database/test/com/google/refine/extension/database/DBExtensionTests.java deleted file mode 100644 index 12cc01930..000000000 --- a/extensions/database/test/com/google/refine/extension/database/DBExtensionTests.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - -Copyright 2010,2011 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.extension.database; - -import org.slf4j.Logger; - -public class DBExtensionTests { - - protected final String MYSQL_DB_NAME = "mysql"; - protected final String DEFAULT_MYSQL_HOST = "127.0.0.1"; - protected final String DEFAULT_MYSQL_PORT = "3306"; - protected final String DEFAULT_MYSQL_USER = "root"; - protected final String DEFAULT_MYSQL_PASSWORD = "secret"; - protected final String DEFAULT_MYSQL_DB_NAME = "testdb"; - - protected final String PGSQL_DB_NAME = "postgresql"; - protected final String DEFAULT_PGSQL_HOST = "127.0.0.1"; - protected final String DEFAULT_PGSQL_PORT = "5432"; - protected final String DEFAULT_PGSQL_USER = "postgres"; - protected final String DEFAULT_PGSQL_PASSWORD = ""; - protected final String DEFAULT_PGSQL_DB_NAME = "testdb"; - - - protected final String MARIA_DB_NAME = "mariadb"; - protected final String DEFAULT_MARIADB_HOST = "127.0.0.1"; - protected final String DEFAULT_MARIADB_PORT = "3306"; - protected final String DEFAULT_MARIADB_USER = "root"; - protected final String DEFAULT_MARIADB_PASSWORD = "secret"; - protected final String DEFAULT_MARIADB_NAME = "testdb"; - - protected final String DEFAULT_TEST_TABLE = "test_data"; - - protected Logger logger; - -// @BeforeSuite -// public void init() { -// System.out.println("Log4j init..."); -// System.setProperty("log4j.configuration", "log4j-test.properties"); -// } - - -} diff --git a/extensions/database/test/com/google/refine/extension/database/DatabaseImportControllerTest.java b/extensions/database/test/com/google/refine/extension/database/DatabaseImportControllerTest.java deleted file mode 100644 index 1157a71cf..000000000 --- a/extensions/database/test/com/google/refine/extension/database/DatabaseImportControllerTest.java +++ /dev/null @@ -1,285 +0,0 @@ -package com.google.refine.extension.database; - - -import static org.mockito.Mockito.when; - -import java.io.File; -import java.io.IOException; -import java.io.PrintWriter; -import java.io.StringWriter; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.json.JSONException; -import org.json.JSONObject; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.testng.Assert; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Optional; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; - -import com.google.refine.ProjectManager; -import com.google.refine.ProjectMetadata; -import com.google.refine.RefineServlet; -import com.google.refine.extension.database.mysql.MySQLDatabaseService; -import com.google.refine.extension.database.stub.RefineDbServletStub; -import com.google.refine.importing.ImportingJob; -import com.google.refine.importing.ImportingManager; -import com.google.refine.io.FileProjectManager; -import com.google.refine.model.Project; - - - - -public class DatabaseImportControllerTest extends DBExtensionTests{ - - @Mock - private HttpServletRequest request; - - @Mock - private HttpServletResponse response; - - private Project project; - private ProjectMetadata metadata; - private ImportingJob job; - private RefineServlet servlet; - - private String JSON_OPTION = "{\"mode\":\"row-based\"}}"; - - private DatabaseConfiguration testDbConfig; - - private String query; - - //System under test - private DatabaseImportController SUT = null; - - @BeforeMethod - public void setUp() throws JSONException, IOException { - MockitoAnnotations.initMocks(this); - - File dir = DBExtensionTestUtils.createTempDirectory("OR_DBExtension_Test_WorkspaceDir"); - FileProjectManager.initialize(dir); - - servlet = new RefineDbServletStub(); - ImportingManager.initialize(servlet); - project = new Project(); - metadata = new ProjectMetadata(); - job = ImportingManager.createJob(); - - metadata.setName("Database Import Test Project"); - ProjectManager.singleton.registerProject(project, metadata); - SUT = new DatabaseImportController(); - - } - - @AfterMethod - public void tearDown() { - SUT = null; - request = null; - response = null; - project = null; - metadata = null; - ImportingManager.disposeJob(job.id); - job = null; - //options = null; - } - - - @Test - public void testDoGet() { - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - - try { - when(response.getWriter()).thenReturn(pw); - - SUT.doGet(request, response); - - String result = sw.getBuffer().toString().trim(); - JSONObject json = new JSONObject(result); - - String code = json.getString("status"); - String message = json.getString("message"); - Assert.assertNotNull(code); - Assert.assertNotNull(message); - Assert.assertEquals(code, "error"); - Assert.assertEquals(message, "GET not implemented"); - - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testDoPostInvalidSubCommand() { - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - try { - when(request.getQueryString()).thenReturn( - "http://127.0.0.1:3333/command/core/importing-controller?controller=database/database-import-controller&subCommand=invalid-sub-command"); - - when(response.getWriter()).thenReturn(pw); - //test - SUT.doPost(request, response); - - String result = sw.getBuffer().toString().trim(); - JSONObject json = new JSONObject(result); - - String code = json.getString("status"); - String message = json.getString("message"); - Assert.assertNotNull(code); - Assert.assertNotNull(message); - Assert.assertEquals(code, "error"); - Assert.assertEquals(message, "No such sub command"); - - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - - - @Test - public void testDoPostInitializeParser() { - - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - - try { - when(request.getQueryString()).thenReturn( - "http://127.0.0.1:3333/command/core/importing-controller?controller=database/database-import-controller&subCommand=initialize-parser-ui"); - when(response.getWriter()).thenReturn(pw); - - SUT.doPost(request, response); - - String result = sw.getBuffer().toString().trim(); - JSONObject json = new JSONObject(result); - - String status = json.getString("status"); - //System.out.println("json::" + json); - Assert.assertEquals(status, "ok"); - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testDoPostParsePreview() { - - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - - try { - - long jobId = job.id; - - when(request.getQueryString()).thenReturn( - "http://127.0.0.1:3333/command/core/importing-controller?controller=database%2Fdatabase-import-controller&jobID=" - + jobId + "&subCommand=parse-preview"); - when(response.getWriter()).thenReturn(pw); - - - when(request.getParameter("databaseType")).thenReturn(testDbConfig.getDatabaseType()); - when(request.getParameter("databaseServer")).thenReturn(testDbConfig.getDatabaseHost()); - when(request.getParameter("databasePort")).thenReturn("" + testDbConfig.getDatabasePort()); - when(request.getParameter("databaseUser")).thenReturn(testDbConfig.getDatabaseUser()); - when(request.getParameter("databasePassword")).thenReturn(testDbConfig.getDatabasePassword()); - when(request.getParameter("initialDatabase")).thenReturn(testDbConfig.getDatabaseName()); - when(request.getParameter("query")).thenReturn(query); - when(request.getParameter("options")).thenReturn(JSON_OPTION); - - SUT.doPost(request, response); - - String result = sw.getBuffer().toString().trim(); - JSONObject json = new JSONObject(result); - - String status = json.getString("status"); - //System.out.println("json::" + json); - Assert.assertEquals(status, "ok"); - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testDoPostCreateProject() { - - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - - try { - - long jobId = job.id; - - when(request.getQueryString()).thenReturn( - "http://127.0.0.1:3333/command/core/importing-controller?controller=database%2Fdatabase-import-controller&jobID=" - + jobId + "&subCommand=create-project"); - when(response.getWriter()).thenReturn(pw); - - - when(request.getParameter("databaseType")).thenReturn(testDbConfig.getDatabaseType()); - when(request.getParameter("databaseServer")).thenReturn(testDbConfig.getDatabaseHost()); - when(request.getParameter("databasePort")).thenReturn("" + testDbConfig.getDatabasePort()); - when(request.getParameter("databaseUser")).thenReturn(testDbConfig.getDatabaseUser()); - when(request.getParameter("databasePassword")).thenReturn(testDbConfig.getDatabasePassword()); - when(request.getParameter("initialDatabase")).thenReturn(testDbConfig.getDatabaseName()); - when(request.getParameter("query")).thenReturn(query); - when(request.getParameter("options")).thenReturn(JSON_OPTION); - - - SUT.doPost(request, response); - - String result = sw.getBuffer().toString().trim(); - JSONObject json = new JSONObject(result); - - String status = json.getString("status"); - //System.out.println("json::" + json); - Assert.assertEquals(status, "ok"); - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @BeforeTest - @Parameters({ "mySqlDbName", "mySqlDbHost", "mySqlDbPort", "mySqlDbUser", "mySqlDbPassword", "mySqlTestTable"}) - public void beforeTest( - @Optional(DEFAULT_MYSQL_DB_NAME) String mySqlDbName, @Optional(DEFAULT_MYSQL_HOST) String mySqlDbHost, - @Optional(DEFAULT_MYSQL_PORT) String mySqlDbPort, @Optional(DEFAULT_MYSQL_USER) String mySqlDbUser, - @Optional(DEFAULT_MYSQL_PASSWORD) String mySqlDbPassword, @Optional(DEFAULT_TEST_TABLE) String mySqlTestTable) { - - MockitoAnnotations.initMocks(this); - - testDbConfig = new DatabaseConfiguration(); - testDbConfig.setDatabaseHost(mySqlDbHost); - testDbConfig.setDatabaseName(mySqlDbName); - testDbConfig.setDatabasePassword(mySqlDbPassword); - testDbConfig.setDatabasePort(Integer.parseInt(mySqlDbPort)); - testDbConfig.setDatabaseType(MySQLDatabaseService.DB_NAME); - testDbConfig.setDatabaseUser(mySqlDbUser); - testDbConfig.setUseSSL(false); - query = "SELECT count(*) FROM " + mySqlTestTable; - - //testTable = mySqlTestTable; - - - DatabaseService.DBType.registerDatabase(MySQLDatabaseService.DB_NAME, MySQLDatabaseService.getInstance()); - - } - - -} diff --git a/extensions/database/test/com/google/refine/extension/database/DatabaseServiceTest.java b/extensions/database/test/com/google/refine/extension/database/DatabaseServiceTest.java deleted file mode 100644 index ddd0eda7e..000000000 --- a/extensions/database/test/com/google/refine/extension/database/DatabaseServiceTest.java +++ /dev/null @@ -1,200 +0,0 @@ -package com.google.refine.extension.database; - - -import java.sql.Connection; -import java.util.List; - -import org.testng.Assert; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Optional; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; - -import com.google.refine.extension.database.mariadb.MariaDBDatabaseService; -import com.google.refine.extension.database.model.DatabaseColumn; -import com.google.refine.extension.database.model.DatabaseInfo; -import com.google.refine.extension.database.model.DatabaseRow; -import com.google.refine.extension.database.mysql.MySQLDatabaseService; -import com.google.refine.extension.database.pgsql.PgSQLDatabaseService; - - - - -public class DatabaseServiceTest extends DBExtensionTests{ - - private DatabaseConfiguration testDbConfig; - private String testTable; - - - @BeforeTest - @Parameters({ "mySqlDbName", "mySqlDbHost", "mySqlDbPort", "mySqlDbUser", "mySqlDbPassword", "mySqlTestTable"}) - public void beforeTest(@Optional(DEFAULT_MYSQL_DB_NAME) String mySqlDbName, @Optional(DEFAULT_MYSQL_HOST) String mySqlDbHost, - @Optional(DEFAULT_MYSQL_PORT) String mySqlDbPort, @Optional(DEFAULT_MYSQL_USER) String mySqlDbUser, - @Optional(DEFAULT_MYSQL_PASSWORD) String mySqlDbPassword, @Optional(DEFAULT_TEST_TABLE) String mySqlTestTable) { - - - testDbConfig = new DatabaseConfiguration(); - testDbConfig.setDatabaseHost(mySqlDbHost); - testDbConfig.setDatabaseName(mySqlDbName); - testDbConfig.setDatabasePassword(mySqlDbPassword); - testDbConfig.setDatabasePort(Integer.parseInt(mySqlDbPort)); - testDbConfig.setDatabaseType(MySQLDatabaseService.DB_NAME); - testDbConfig.setDatabaseUser(mySqlDbUser); - testDbConfig.setUseSSL(false); - - testTable = mySqlTestTable; - // DBExtensionTestUtils.initTestData(testDbConfig); - - DatabaseService.DBType.registerDatabase(MariaDBDatabaseService.DB_NAME, MariaDBDatabaseService.getInstance()); - DatabaseService.DBType.registerDatabase(MySQLDatabaseService.DB_NAME, MySQLDatabaseService.getInstance()); - DatabaseService.DBType.registerDatabase(PgSQLDatabaseService.DB_NAME, PgSQLDatabaseService.getInstance()); - - } - - - - @Test - public void testGetDatabaseUrl() { - DatabaseService dbService = DatabaseService.get(testDbConfig.getDatabaseType()); - String dbUrl = dbService.getDatabaseUrl(testDbConfig); - Assert.assertNotNull(dbUrl); - Assert.assertEquals(dbUrl, DBExtensionTestUtils.getJDBCUrl(testDbConfig)); - } - - - - @Test - public void testGetPgSQLDBService() { - - DatabaseService dbService = DatabaseService.get(PgSQLDatabaseService.DB_NAME); - Assert.assertNotNull(dbService); - Assert.assertEquals(dbService.getClass(), PgSQLDatabaseService.class); - } - - @Test - public void testGetMySQLDBService() { - - DatabaseService dbService = DatabaseService.get(MySQLDatabaseService.DB_NAME); - Assert.assertNotNull(dbService); - Assert.assertEquals(dbService.getClass(), MySQLDatabaseService.class); - } - - @Test - public void testGetMariaDBSQLDBService() { - - DatabaseService dbService = DatabaseService.get(MariaDBDatabaseService.DB_NAME); - Assert.assertNotNull(dbService); - Assert.assertEquals(dbService.getClass(), MariaDBDatabaseService.class); - } - - @Test - public void testGetConnection() { - - try { - - DatabaseService dbService = DatabaseService.get(testDbConfig.getDatabaseType()); - Connection conn = dbService.getConnection(testDbConfig); - Assert.assertNotNull(conn); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testTestConnection() { - - try { - DatabaseService dbService = DatabaseService.get(testDbConfig.getDatabaseType()); - boolean result = dbService.testConnection(testDbConfig); - Assert.assertEquals(result, true); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - - @Test - public void testConnect() { - - try { - DatabaseService dbService = DatabaseService.get(testDbConfig.getDatabaseType()); - DatabaseInfo databaseInfo = dbService.connect(testDbConfig); - Assert.assertNotNull(databaseInfo); - - } catch (DatabaseServiceException e) { - e.printStackTrace(); - } - - } - - @Test - public void testExecuteQuery() { - - try { - DatabaseService dbService = DatabaseService.get(testDbConfig.getDatabaseType()); - DatabaseInfo databaseInfo = dbService.testQuery(testDbConfig, - "SELECT * FROM " + testTable); - - Assert.assertNotNull(databaseInfo); - - } catch (DatabaseServiceException e) { - e.printStackTrace(); - } - - } - - @Test - public void testBuildLimitQuery() { - DatabaseService dbService = DatabaseService.get(testDbConfig.getDatabaseType()); - String limitQuery = dbService.buildLimitQuery(100, 0, "SELECT * FROM " + testTable); - - Assert.assertNotNull(limitQuery); - - Assert.assertEquals(limitQuery, "SELECT * FROM " + testTable + " LIMIT " + 100 + " OFFSET " + 0 + ";"); - } - - @Test - public void testGetColumns() { - List dbColumns; - - try { - DatabaseService dbService = DatabaseService.get(testDbConfig.getDatabaseType()); - dbColumns = dbService.getColumns(testDbConfig,"SELECT * FROM " + testTable); - Assert.assertNotNull(dbColumns); - - int cols = dbColumns.size(); - Assert.assertEquals(cols, 10); - - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - - } - - @Test - public void testGetRows() { - - try { - - DatabaseService dbService = DatabaseService.get(testDbConfig.getDatabaseType()); - List dbRows = dbService.getRows(testDbConfig, - "SELECT * FROM " + testTable); - - Assert.assertNotNull(dbRows); - Assert.assertEquals(dbRows.size(), 1); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - -} diff --git a/extensions/database/test/com/google/refine/extension/database/DatabaseTestConfig.java b/extensions/database/test/com/google/refine/extension/database/DatabaseTestConfig.java deleted file mode 100644 index 531e8c400..000000000 --- a/extensions/database/test/com/google/refine/extension/database/DatabaseTestConfig.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.google.refine.extension.database; - -import org.testng.annotations.AfterSuite; -import org.testng.annotations.BeforeSuite; -import org.testng.annotations.Optional; -import org.testng.annotations.Parameters; - -import com.google.refine.extension.database.mariadb.MariaDBDatabaseService; -import com.google.refine.extension.database.mysql.MySQLDatabaseService; -import com.google.refine.extension.database.pgsql.PgSQLDatabaseService; - -public class DatabaseTestConfig extends DBExtensionTests { - - private DatabaseConfiguration mysqlDbConfig; - private DatabaseConfiguration pgsqlDbConfig; - private DatabaseConfiguration mariadbDbConfig; - - @BeforeSuite - @Parameters({ "mySqlDbName", "mySqlDbHost", "mySqlDbPort", "mySqlDbUser", "mySqlDbPassword", "mySqlTestTable", - "pgSqlDbName", "pgSqlDbHost", "pgSqlDbPort", "pgSqlDbUser", "pgSqlDbPassword", "pgSqlTestTable", - "mariadbDbName", "mariadbDbHost", "mariadbDbPort", "mariadbyDbUser", "mariadbDbPassword", "mariadbTestTable"}) - public void beforeSuite( - @Optional(DEFAULT_MYSQL_DB_NAME) String mySqlDbName, @Optional(DEFAULT_MYSQL_HOST) String mySqlDbHost, - @Optional(DEFAULT_MYSQL_PORT) String mySqlDbPort, @Optional(DEFAULT_MYSQL_USER) String mySqlDbUser, - @Optional(DEFAULT_MYSQL_PASSWORD) String mySqlDbPassword, @Optional(DEFAULT_TEST_TABLE) String mySqlTestTable, - - @Optional(DEFAULT_PGSQL_DB_NAME) String pgSqlDbName, @Optional(DEFAULT_PGSQL_HOST) String pgSqlDbHost, - @Optional(DEFAULT_PGSQL_PORT) String pgSqlDbPort, @Optional(DEFAULT_PGSQL_USER) String pgSqlDbUser, - @Optional(DEFAULT_PGSQL_PASSWORD) String pgSqlDbPassword, @Optional(DEFAULT_TEST_TABLE) String pgSqlTestTable, - - @Optional(DEFAULT_MARIADB_NAME) String mariadbDbName, @Optional(DEFAULT_MARIADB_HOST) String mariadbDbHost, - @Optional(DEFAULT_MARIADB_PORT) String mariadbDbPort, @Optional(DEFAULT_MARIADB_USER) String mariadbyDbUser, - @Optional(DEFAULT_MARIADB_PASSWORD) String mariadbDbPassword, @Optional(DEFAULT_TEST_TABLE) String mariadbTestTable) { - - //System.out.println("@BeforeSuite\n"); - mysqlDbConfig = new DatabaseConfiguration(); - mysqlDbConfig.setDatabaseHost(mySqlDbHost); - mysqlDbConfig.setDatabaseName(mySqlDbName); - mysqlDbConfig.setDatabasePassword(mySqlDbPassword); - mysqlDbConfig.setDatabasePort(Integer.parseInt(mySqlDbPort)); - mysqlDbConfig.setDatabaseType(MySQLDatabaseService.DB_NAME); - mysqlDbConfig.setDatabaseUser(mySqlDbUser); - mysqlDbConfig.setUseSSL(false); - - pgsqlDbConfig = new DatabaseConfiguration(); - pgsqlDbConfig.setDatabaseHost(pgSqlDbHost); - pgsqlDbConfig.setDatabaseName(pgSqlDbName); - pgsqlDbConfig.setDatabasePassword(pgSqlDbPassword); - pgsqlDbConfig.setDatabasePort(Integer.parseInt(pgSqlDbPort)); - pgsqlDbConfig.setDatabaseType(PgSQLDatabaseService.DB_NAME); - pgsqlDbConfig.setDatabaseUser(pgSqlDbUser); - pgsqlDbConfig.setUseSSL(false); - - mariadbDbConfig = new DatabaseConfiguration(); - mariadbDbConfig.setDatabaseHost(mariadbDbHost); - mariadbDbConfig.setDatabaseName(mariadbDbName); - mariadbDbConfig.setDatabasePassword(mariadbDbPassword); - mariadbDbConfig.setDatabasePort(Integer.parseInt(mariadbDbPort)); - mariadbDbConfig.setDatabaseType(MariaDBDatabaseService.DB_NAME); - mariadbDbConfig.setDatabaseUser(mariadbyDbUser); - mariadbDbConfig.setUseSSL(false); - - DBExtensionTestUtils.initTestData(mysqlDbConfig); - DBExtensionTestUtils.initTestData(pgsqlDbConfig); - DBExtensionTestUtils.initTestData(mariadbDbConfig); - } - - @AfterSuite - public void afterSuite() { - // System.out.println("@AfterSuite"); - - DBExtensionTestUtils.cleanUpTestData(mysqlDbConfig); - DBExtensionTestUtils.cleanUpTestData(pgsqlDbConfig); - DBExtensionTestUtils.cleanUpTestData(mariadbDbConfig); - } - -} - diff --git a/extensions/database/test/com/google/refine/extension/database/SimpleTextEncryptorTest.java b/extensions/database/test/com/google/refine/extension/database/SimpleTextEncryptorTest.java deleted file mode 100644 index 1ef21450f..000000000 --- a/extensions/database/test/com/google/refine/extension/database/SimpleTextEncryptorTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.google.refine.extension.database; - -import org.testng.Assert; -import org.testng.annotations.Test; - -public class SimpleTextEncryptorTest { - - @Test - public void encrypt() { - SimpleTextEncryptor textEncryptor = new SimpleTextEncryptor("WEWssa!@d445d"); - String password = "testpass"; - String encPass = textEncryptor.encrypt(password); - Assert.assertNotNull(encPass); - Assert.assertNotEquals(encPass, password); - - } - - @Test - public void decrypt() { - SimpleTextEncryptor textEncryptor = new SimpleTextEncryptor("OOEWssa!@d445d"); - String password = "testpass"; - String encPass = textEncryptor.encrypt(password); - Assert.assertNotNull(encPass); - Assert.assertNotEquals(encPass, password); - String decPass = textEncryptor.decrypt(encPass); - Assert.assertEquals(decPass, password); - } -} diff --git a/extensions/database/test/com/google/refine/extension/database/cmd/ConnectCommandTest.java b/extensions/database/test/com/google/refine/extension/database/cmd/ConnectCommandTest.java deleted file mode 100644 index a94f43cab..000000000 --- a/extensions/database/test/com/google/refine/extension/database/cmd/ConnectCommandTest.java +++ /dev/null @@ -1,101 +0,0 @@ - -package com.google.refine.extension.database.cmd; - -import static org.mockito.Mockito.when; - -import java.io.PrintWriter; -import java.io.StringWriter; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.json.JSONObject; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.testng.Assert; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Optional; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; - -import com.google.refine.extension.database.DBExtensionTests; -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseService; -import com.google.refine.extension.database.mysql.MySQLDatabaseService; - - -public class ConnectCommandTest extends DBExtensionTests { - - - @Mock - private HttpServletRequest request; - - @Mock - private HttpServletResponse response; - - private DatabaseConfiguration testDbConfig; - // private String testTable; - - - @BeforeTest - @Parameters({ "mySqlDbName", "mySqlDbHost", "mySqlDbPort", "mySqlDbUser", "mySqlDbPassword", "mySqlTestTable"}) - public void beforeTest(@Optional(DEFAULT_MYSQL_DB_NAME) String mySqlDbName, @Optional(DEFAULT_MYSQL_HOST) String mySqlDbHost, - @Optional(DEFAULT_MYSQL_PORT) String mySqlDbPort, @Optional(DEFAULT_MYSQL_USER) String mySqlDbUser, - @Optional(DEFAULT_MYSQL_PASSWORD) String mySqlDbPassword, @Optional(DEFAULT_TEST_TABLE) String mySqlTestTable) { - - MockitoAnnotations.initMocks(this); - - testDbConfig = new DatabaseConfiguration(); - testDbConfig.setDatabaseHost(mySqlDbHost); - testDbConfig.setDatabaseName(mySqlDbName); - testDbConfig.setDatabasePassword(mySqlDbPassword); - testDbConfig.setDatabasePort(Integer.parseInt(mySqlDbPort)); - testDbConfig.setDatabaseType(MySQLDatabaseService.DB_NAME); - testDbConfig.setDatabaseUser(mySqlDbUser); - testDbConfig.setUseSSL(false); - - //testTable = mySqlTestTable; - //DBExtensionTestUtils.initTestData(testDbConfig); - - DatabaseService.DBType.registerDatabase(MySQLDatabaseService.DB_NAME, MySQLDatabaseService.getInstance()); - - } - - - @Test - public void testDoPost() { - - when(request.getParameter("databaseType")).thenReturn(MySQLDatabaseService.DB_NAME); - when(request.getParameter("databaseServer")).thenReturn(testDbConfig.getDatabaseHost()); - when(request.getParameter("databasePort")).thenReturn("" + testDbConfig.getDatabasePort()); - when(request.getParameter("databaseUser")).thenReturn(testDbConfig.getDatabaseUser()); - when(request.getParameter("databasePassword")).thenReturn(testDbConfig.getDatabasePassword()); - when(request.getParameter("initialDatabase")).thenReturn(testDbConfig.getDatabaseName()); - - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - - try { - when(response.getWriter()).thenReturn(pw); - ConnectCommand connectCommand = new ConnectCommand(); - - connectCommand.doPost(request, response); - - String result = sw.getBuffer().toString().trim(); - JSONObject json = new JSONObject(result); - - String code = json.getString("code"); - Assert.assertEquals(code, "ok"); - - String databaseInfo = json.getString("databaseInfo"); - Assert.assertNotNull(databaseInfo); - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - - -} diff --git a/extensions/database/test/com/google/refine/extension/database/cmd/ExecuteQueryCommandTest.java b/extensions/database/test/com/google/refine/extension/database/cmd/ExecuteQueryCommandTest.java deleted file mode 100644 index 30bcd544f..000000000 --- a/extensions/database/test/com/google/refine/extension/database/cmd/ExecuteQueryCommandTest.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.google.refine.extension.database.cmd; - -import static org.mockito.Mockito.when; - -import java.io.PrintWriter; -import java.io.StringWriter; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.json.JSONObject; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.testng.Assert; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Optional; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; - -import com.google.refine.extension.database.DBExtensionTests; -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseService; -import com.google.refine.extension.database.mysql.MySQLDatabaseService; - - -public class ExecuteQueryCommandTest extends DBExtensionTests { - - @Mock - private HttpServletRequest request; - - @Mock - private HttpServletResponse response; - - - private DatabaseConfiguration testDbConfig; - private String testTable; - - - @BeforeTest - @Parameters({ "mySqlDbName", "mySqlDbHost", "mySqlDbPort", "mySqlDbUser", "mySqlDbPassword", "mySqlTestTable"}) - public void beforeTest(@Optional(DEFAULT_MYSQL_DB_NAME) String mySqlDbName, @Optional(DEFAULT_MYSQL_HOST) String mySqlDbHost, - @Optional(DEFAULT_MYSQL_PORT) String mySqlDbPort, @Optional(DEFAULT_MYSQL_USER) String mySqlDbUser, - @Optional(DEFAULT_MYSQL_PASSWORD) String mySqlDbPassword, @Optional(DEFAULT_TEST_TABLE) String mySqlTestTable) { - - MockitoAnnotations.initMocks(this); - testDbConfig = new DatabaseConfiguration(); - testDbConfig.setDatabaseHost(mySqlDbHost); - testDbConfig.setDatabaseName(mySqlDbName); - testDbConfig.setDatabasePassword(mySqlDbPassword); - testDbConfig.setDatabasePort(Integer.parseInt(mySqlDbPort)); - testDbConfig.setDatabaseType(MySQLDatabaseService.DB_NAME); - testDbConfig.setDatabaseUser(mySqlDbUser); - testDbConfig.setUseSSL(false); - - testTable = mySqlTestTable; - // DBExtensionTestUtils.initTestData(testDbConfig); - - DatabaseService.DBType.registerDatabase(MySQLDatabaseService.DB_NAME, MySQLDatabaseService.getInstance()); - - } - - @Test - public void testDoPost() { - - when(request.getParameter("databaseType")).thenReturn(testDbConfig.getDatabaseType()); - when(request.getParameter("databaseServer")).thenReturn(testDbConfig.getDatabaseHost()); - when(request.getParameter("databasePort")).thenReturn("" + testDbConfig.getDatabasePort()); - when(request.getParameter("databaseUser")).thenReturn(testDbConfig.getDatabaseUser()); - when(request.getParameter("databasePassword")).thenReturn(testDbConfig.getDatabasePassword()); - when(request.getParameter("initialDatabase")).thenReturn(testDbConfig.getDatabaseName()); - when(request.getParameter("queryString")).thenReturn("SELECT count(*) FROM " + testTable); - - - StringWriter sw = new StringWriter(); - - PrintWriter pw = new PrintWriter(sw); - - try { - when(response.getWriter()).thenReturn(pw); - ExecuteQueryCommand executeQueryCommand = new ExecuteQueryCommand(); - - executeQueryCommand.doPost(request, response); - - String result = sw.getBuffer().toString().trim(); - JSONObject json = new JSONObject(result); - - String code = json.getString("code"); - Assert.assertEquals(code, "ok"); - - String queryResult = json.getString("QueryResult"); - Assert.assertNotNull(queryResult); - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - -} diff --git a/extensions/database/test/com/google/refine/extension/database/cmd/SavedConnectionCommandTest.java b/extensions/database/test/com/google/refine/extension/database/cmd/SavedConnectionCommandTest.java deleted file mode 100644 index f5f19335f..000000000 --- a/extensions/database/test/com/google/refine/extension/database/cmd/SavedConnectionCommandTest.java +++ /dev/null @@ -1,315 +0,0 @@ -package com.google.refine.extension.database.cmd; - -import static org.mockito.Mockito.when; - -import java.io.File; -import java.io.IOException; -import java.io.PrintWriter; -import java.io.StringWriter; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.testng.Assert; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Optional; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; - -import com.google.refine.ProjectManager; -import com.google.refine.ProjectMetadata; -import com.google.refine.RefineServlet; -import com.google.refine.extension.database.DBExtensionTestUtils; -import com.google.refine.extension.database.DBExtensionTests; -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseService; -import com.google.refine.extension.database.mysql.MySQLDatabaseService; -import com.google.refine.extension.database.stub.RefineDbServletStub; -import com.google.refine.importing.ImportingManager; -import com.google.refine.io.FileProjectManager; -import com.google.refine.model.Project; - -public class SavedConnectionCommandTest extends DBExtensionTests{ - - @Mock - private HttpServletRequest request; - - @Mock - private HttpServletResponse response; - - private DatabaseConfiguration testDbConfig; - - private Project project; - private ProjectMetadata metadata; - //private ImportingJob job; - private RefineServlet servlet; - - // private String JSON_OPTION = "{\"mode\":\"row-based\"}}"; - - - //System under test - private SavedConnectionCommand SUT = null; - - @BeforeMethod - public void setUp() throws JSONException, IOException { - MockitoAnnotations.initMocks(this); - - File dir = DBExtensionTestUtils.createTempDirectory("OR_DBExtension_Test_WorkspaceDir"); - FileProjectManager.initialize(dir); - - servlet = new RefineDbServletStub(); - ImportingManager.initialize(servlet); - project = new Project(); - metadata = new ProjectMetadata(); - //job = ImportingManager.createJob(); - - metadata.setName("Save DB Config Test Project"); - ProjectManager.singleton.registerProject(project, metadata); - SUT = new SavedConnectionCommand(); - - } - - @AfterMethod - public void tearDown() { - SUT = null; - request = null; - response = null; - project = null; - metadata = null; - // ImportingManager.disposeJob(job.id); - // job = null; - //options = null; - } - - @BeforeTest - @Parameters({ "mySqlDbName", "mySqlDbHost", "mySqlDbPort", "mySqlDbUser", "mySqlDbPassword", "mySqlTestTable"}) - public void beforeTest(@Optional(DEFAULT_MYSQL_DB_NAME) String mySqlDbName, @Optional(DEFAULT_MYSQL_HOST) String mySqlDbHost, - @Optional(DEFAULT_MYSQL_PORT) String mySqlDbPort, @Optional(DEFAULT_MYSQL_USER) String mySqlDbUser, - @Optional(DEFAULT_MYSQL_PASSWORD) String mySqlDbPassword, @Optional(DEFAULT_TEST_TABLE) String mySqlTestTable) { - - // MockitoAnnotations.initMocks(this); - testDbConfig = new DatabaseConfiguration(); - testDbConfig.setDatabaseHost(mySqlDbHost); - testDbConfig.setDatabaseName(mySqlDbName); - testDbConfig.setDatabasePassword(mySqlDbPassword); - testDbConfig.setDatabasePort(Integer.parseInt(mySqlDbPort)); - testDbConfig.setDatabaseType(MySQLDatabaseService.DB_NAME); - testDbConfig.setDatabaseUser(mySqlDbUser); - testDbConfig.setUseSSL(false); - - DatabaseService.DBType.registerDatabase(MySQLDatabaseService.DB_NAME, MySQLDatabaseService.getInstance()); - - } - - - - private void saveDatabaseConfiguration(String savedDbName) { - - when(request.getParameter("connectionName")).thenReturn(savedDbName); - when(request.getParameter("databaseType")).thenReturn(MySQLDatabaseService.DB_NAME); - when(request.getParameter("databaseServer")).thenReturn(testDbConfig.getDatabaseHost()); - when(request.getParameter("databasePort")).thenReturn("" + testDbConfig.getDatabasePort()); - when(request.getParameter("databaseUser")).thenReturn(testDbConfig.getDatabaseUser()); - when(request.getParameter("databasePassword")).thenReturn(testDbConfig.getDatabasePassword()); - when(request.getParameter("initialDatabase")).thenReturn(testDbConfig.getDatabaseName()); - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - - try { - when(response.getWriter()).thenReturn(pw); - - SUT.doPost(request, response); - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - - @Test - public void testDoPost() { - - when(request.getParameter("connectionName")).thenReturn("test-db-name"); - when(request.getParameter("databaseType")).thenReturn(MySQLDatabaseService.DB_NAME); - when(request.getParameter("databaseServer")).thenReturn(testDbConfig.getDatabaseHost()); - when(request.getParameter("databasePort")).thenReturn("" + testDbConfig.getDatabasePort()); - when(request.getParameter("databaseUser")).thenReturn(testDbConfig.getDatabaseUser()); - when(request.getParameter("databasePassword")).thenReturn(testDbConfig.getDatabasePassword()); - when(request.getParameter("initialDatabase")).thenReturn(testDbConfig.getDatabaseName()); - - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - - try { - when(response.getWriter()).thenReturn(pw); - - SUT.doPost(request, response); - - String result = sw.getBuffer().toString().trim(); - - JSONObject json = new JSONObject(result); - - JSONArray savedConnections = json.getJSONArray("savedConnections"); - Assert.assertNotNull(savedConnections); - - int len = savedConnections.length(); - - Assert.assertEquals(len, 1); - - - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - - @Test - public void testDoGet() { - String testDbName = "testLocalDb"; - //add saved connection - saveDatabaseConfiguration(testDbName); - - - when(request.getParameter("connectionName")).thenReturn(testDbName); - when(request.getParameter("databaseType")).thenReturn(MySQLDatabaseService.DB_NAME); - when(request.getParameter("databaseServer")).thenReturn(testDbConfig.getDatabaseHost()); - when(request.getParameter("databasePort")).thenReturn("" + testDbConfig.getDatabasePort()); - when(request.getParameter("databaseUser")).thenReturn(testDbConfig.getDatabaseUser()); - when(request.getParameter("databasePassword")).thenReturn(testDbConfig.getDatabasePassword()); - when(request.getParameter("initialDatabase")).thenReturn(testDbConfig.getDatabaseName()); - - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - - try { - when(response.getWriter()).thenReturn(pw); - - SUT.doGet(request, response); - - JSONObject json = new JSONObject(sw.getBuffer().toString().trim()); - - JSONArray savedConnections = json.getJSONArray("savedConnections"); - Assert.assertNotNull(savedConnections); - - Assert.assertEquals(savedConnections.length(), 1); - - JSONObject sc = (JSONObject)savedConnections.get(0); - // System.out.println("sc" + sc); - String connName = sc.getString("connectionName"); - Assert.assertEquals(connName, testDbName); - - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testDoPut() { - String testDbName = "testLocalDb"; - saveDatabaseConfiguration(testDbName); - - - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - - try { - when(response.getWriter()).thenReturn(pw); - - //modify database config - String newHost = "localhost"; - when(request.getParameter("connectionName")).thenReturn(testDbName); - when(request.getParameter("databaseType")).thenReturn(MySQLDatabaseService.DB_NAME); - when(request.getParameter("databaseServer")).thenReturn(newHost); - when(request.getParameter("databasePort")).thenReturn("" + testDbConfig.getDatabasePort()); - when(request.getParameter("databaseUser")).thenReturn(testDbConfig.getDatabaseUser()); - when(request.getParameter("databasePassword")).thenReturn(testDbConfig.getDatabasePassword()); - when(request.getParameter("initialDatabase")).thenReturn(testDbConfig.getDatabaseName()); - - SUT.doPut(request, response); - - JSONObject json = new JSONObject(sw.getBuffer().toString().trim()); - JSONArray savedConnections = json.getJSONArray("savedConnections"); - Assert.assertNotNull(savedConnections); - - Assert.assertEquals(savedConnections.length(), 1); - - JSONObject sc = (JSONObject)savedConnections.get(0); - System.out.println("sc" + sc); - String newDbHost = sc.getString("databaseHost"); - Assert.assertEquals(newDbHost, newHost); - - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testDoDeleteValidConnectionName() { - String testDbName = "testLocalDb"; - saveDatabaseConfiguration(testDbName); - - - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - - try { - when(response.getWriter()).thenReturn(pw); - when(request.getParameter("connectionName")).thenReturn(testDbName); - SUT.doDelete(request, response); - - JSONObject json = new JSONObject(sw.getBuffer().toString().trim()); - JSONArray savedConnections = json.getJSONArray("savedConnections"); - Assert.assertNotNull(savedConnections); - - Assert.assertEquals(savedConnections.length(), 0); - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testDoDeleteInValidConnectionName() { - String testDbName = "testLocalDb"; - saveDatabaseConfiguration(testDbName); - - - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - - try { - when(response.getWriter()).thenReturn(pw); - - when(request.getParameter("connectionName")).thenReturn("noDbName"); - - SUT.doDelete(request, response); - - // String result = sw.getBuffer().toString().trim(); - - JSONObject json = new JSONObject(); - - Assert.assertNotNull(json); - - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - -} diff --git a/extensions/database/test/com/google/refine/extension/database/cmd/TestConnectCommandTest.java b/extensions/database/test/com/google/refine/extension/database/cmd/TestConnectCommandTest.java deleted file mode 100644 index f59db52b9..000000000 --- a/extensions/database/test/com/google/refine/extension/database/cmd/TestConnectCommandTest.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.google.refine.extension.database.cmd; - -import static org.mockito.Mockito.when; - -import java.io.PrintWriter; -import java.io.StringWriter; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.json.JSONObject; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.testng.Assert; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Optional; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; - -import com.google.refine.extension.database.DBExtensionTests; -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseService; -import com.google.refine.extension.database.mysql.MySQLDatabaseService; - - - -public class TestConnectCommandTest extends DBExtensionTests{ - - @Mock - private HttpServletRequest request; - - @Mock - private HttpServletResponse response; - - private DatabaseConfiguration testDbConfig; - // private String testTable; - - - @BeforeTest - @Parameters({ "mySqlDbName", "mySqlDbHost", "mySqlDbPort", "mySqlDbUser", "mySqlDbPassword", "mySqlTestTable"}) - public void beforeTest(@Optional(DEFAULT_MYSQL_DB_NAME) String mySqlDbName, @Optional(DEFAULT_MYSQL_HOST) String mySqlDbHost, - @Optional(DEFAULT_MYSQL_PORT) String mySqlDbPort, @Optional(DEFAULT_MYSQL_USER) String mySqlDbUser, - @Optional(DEFAULT_MYSQL_PASSWORD) String mySqlDbPassword, @Optional(DEFAULT_TEST_TABLE) String mySqlTestTable) { - - MockitoAnnotations.initMocks(this); - - testDbConfig = new DatabaseConfiguration(); - testDbConfig.setDatabaseHost(mySqlDbHost); - testDbConfig.setDatabaseName(mySqlDbName); - testDbConfig.setDatabasePassword(mySqlDbPassword); - testDbConfig.setDatabasePort(Integer.parseInt(mySqlDbPort)); - testDbConfig.setDatabaseType(MySQLDatabaseService.DB_NAME); - testDbConfig.setDatabaseUser(mySqlDbUser); - testDbConfig.setUseSSL(false); - - //testTable = mySqlTestTable; - // DBExtensionTestUtils.initTestData(testDbConfig); - - DatabaseService.DBType.registerDatabase(MySQLDatabaseService.DB_NAME, MySQLDatabaseService.getInstance()); - - } - - - - @Test - public void testDoPost() { - - when(request.getParameter("databaseType")).thenReturn(MySQLDatabaseService.DB_NAME); - when(request.getParameter("databaseServer")).thenReturn(testDbConfig.getDatabaseHost()); - when(request.getParameter("databasePort")).thenReturn("" + testDbConfig.getDatabasePort()); - when(request.getParameter("databaseUser")).thenReturn(testDbConfig.getDatabaseUser()); - when(request.getParameter("databasePassword")).thenReturn(testDbConfig.getDatabasePassword()); - when(request.getParameter("initialDatabase")).thenReturn(testDbConfig.getDatabaseName()); - - - StringWriter sw = new StringWriter(); - - PrintWriter pw = new PrintWriter(sw); - - try { - when(response.getWriter()).thenReturn(pw); - TestConnectCommand connectCommand = new TestConnectCommand(); - - connectCommand.doPost(request, response); - - String result = sw.getBuffer().toString().trim(); - JSONObject json = new JSONObject(result); - - String code = json.getString("code"); - Assert.assertEquals(code, "ok"); - - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - -} diff --git a/extensions/database/test/com/google/refine/extension/database/cmd/TestQueryCommandTest.java b/extensions/database/test/com/google/refine/extension/database/cmd/TestQueryCommandTest.java deleted file mode 100644 index cd3100af7..000000000 --- a/extensions/database/test/com/google/refine/extension/database/cmd/TestQueryCommandTest.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.google.refine.extension.database.cmd; - -import static org.mockito.Mockito.when; - -import java.io.PrintWriter; -import java.io.StringWriter; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.json.JSONObject; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.testng.Assert; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Optional; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; - -import com.google.refine.extension.database.DBExtensionTests; -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseService; -import com.google.refine.extension.database.mysql.MySQLDatabaseService; - - -public class TestQueryCommandTest extends DBExtensionTests { - - @Mock - private HttpServletRequest request; - - @Mock - private HttpServletResponse response; - - - private DatabaseConfiguration testDbConfig; - private String testTable; - - - @BeforeTest - @Parameters({ "mySqlDbName", "mySqlDbHost", "mySqlDbPort", "mySqlDbUser", "mySqlDbPassword", "mySqlTestTable"}) - public void beforeTest(@Optional(DEFAULT_MYSQL_DB_NAME) String mySqlDbName, @Optional(DEFAULT_MYSQL_HOST) String mySqlDbHost, - @Optional(DEFAULT_MYSQL_PORT) String mySqlDbPort, @Optional(DEFAULT_MYSQL_USER) String mySqlDbUser, - @Optional(DEFAULT_MYSQL_PASSWORD) String mySqlDbPassword, @Optional(DEFAULT_TEST_TABLE) String mySqlTestTable) { - - MockitoAnnotations.initMocks(this); - testDbConfig = new DatabaseConfiguration(); - testDbConfig.setDatabaseHost(mySqlDbHost); - testDbConfig.setDatabaseName(mySqlDbName); - testDbConfig.setDatabasePassword(mySqlDbPassword); - testDbConfig.setDatabasePort(Integer.parseInt(mySqlDbPort)); - testDbConfig.setDatabaseType(MySQLDatabaseService.DB_NAME); - testDbConfig.setDatabaseUser(mySqlDbUser); - testDbConfig.setUseSSL(false); - - testTable = mySqlTestTable; - //DBExtensionTestUtils.initTestData(testDbConfig); - - DatabaseService.DBType.registerDatabase(MySQLDatabaseService.DB_NAME, MySQLDatabaseService.getInstance()); - - } - - - @Test - public void testDoPost() { - - when(request.getParameter("databaseType")).thenReturn(testDbConfig.getDatabaseType()); - when(request.getParameter("databaseServer")).thenReturn(testDbConfig.getDatabaseHost()); - when(request.getParameter("databasePort")).thenReturn("" + testDbConfig.getDatabasePort()); - when(request.getParameter("databaseUser")).thenReturn(testDbConfig.getDatabaseUser()); - when(request.getParameter("databasePassword")).thenReturn(testDbConfig.getDatabasePassword()); - when(request.getParameter("initialDatabase")).thenReturn(testDbConfig.getDatabaseName()); - when(request.getParameter("query")).thenReturn("SELECT count(*) FROM " + testTable); - - - StringWriter sw = new StringWriter(); - - PrintWriter pw = new PrintWriter(sw); - - try { - when(response.getWriter()).thenReturn(pw); - TestQueryCommand executeQueryCommand = new TestQueryCommand(); - - executeQueryCommand.doPost(request, response); - - String result = sw.getBuffer().toString().trim(); - JSONObject json = new JSONObject(result); - - String code = json.getString("code"); - Assert.assertEquals(code, "ok"); - - String queryResult = json.getString("QueryResult"); - Assert.assertNotNull(queryResult); - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - -} diff --git a/extensions/database/test/com/google/refine/extension/database/mariadb/MariaDBConnectionManagerTest.java b/extensions/database/test/com/google/refine/extension/database/mariadb/MariaDBConnectionManagerTest.java deleted file mode 100644 index a02d44a4f..000000000 --- a/extensions/database/test/com/google/refine/extension/database/mariadb/MariaDBConnectionManagerTest.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.google.refine.extension.database.mariadb; - -import java.sql.Connection; - -import org.mockito.MockitoAnnotations; -import org.testng.Assert; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Optional; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; - -import com.google.refine.extension.database.DBExtensionTests; -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseService; -import com.google.refine.extension.database.DatabaseServiceException; - - -public class MariaDBConnectionManagerTest extends DBExtensionTests { - - - - private DatabaseConfiguration testDbConfig; - - - @BeforeTest - @Parameters({ "mariaDbName", "mariaDbHost", "mariaDbPort", "mariaDbUser", "mariaDbPassword", "mariaDbTestTable"}) - public void beforeTest(@Optional(DEFAULT_MARIADB_NAME) String mariaDbName, @Optional(DEFAULT_MARIADB_HOST) String mariaDbHost, - @Optional(DEFAULT_MARIADB_PORT) String mariaDbPort, @Optional(DEFAULT_MARIADB_USER) String mariaDbUser, - @Optional(DEFAULT_MARIADB_PASSWORD) String mariaDbPassword, @Optional(DEFAULT_TEST_TABLE) String mariaDbTestTable) { - - MockitoAnnotations.initMocks(this); - - testDbConfig = new DatabaseConfiguration(); - testDbConfig.setDatabaseHost(mariaDbHost); - testDbConfig.setDatabaseName(mariaDbName); - testDbConfig.setDatabasePassword(mariaDbPassword); - testDbConfig.setDatabasePort(Integer.parseInt(mariaDbPort)); - testDbConfig.setDatabaseType(MariaDBDatabaseService.DB_NAME); - testDbConfig.setDatabaseUser(mariaDbUser); - testDbConfig.setUseSSL(false); - -// testTable = mariaDbTestTable; - // DBExtensionTestUtils.initTestData(testDbConfig); - - DatabaseService.DBType.registerDatabase(MariaDBDatabaseService.DB_NAME, MariaDBDatabaseService.getInstance()); - - } - - - @Test - public void testTestConnection() { - - try { - boolean conn = MariaDBConnectionManager.getInstance().testConnection(testDbConfig); - Assert.assertEquals(conn, true); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testGetConnection() { - - try { - Connection conn = MariaDBConnectionManager.getInstance().getConnection(testDbConfig, true); - Assert.assertNotNull(conn); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testShutdown() { - - try { - Connection conn = MariaDBConnectionManager.getInstance().getConnection(testDbConfig, true); - Assert.assertNotNull(conn); - - MariaDBConnectionManager.getInstance().shutdown(); - - if(conn != null) { - Assert.assertEquals(conn.isClosed(), true); - } - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - -} diff --git a/extensions/database/test/com/google/refine/extension/database/mariadb/MariaDBDatabaseServiceTest.java b/extensions/database/test/com/google/refine/extension/database/mariadb/MariaDBDatabaseServiceTest.java deleted file mode 100644 index 3456954e2..000000000 --- a/extensions/database/test/com/google/refine/extension/database/mariadb/MariaDBDatabaseServiceTest.java +++ /dev/null @@ -1,172 +0,0 @@ -package com.google.refine.extension.database.mariadb; - -import java.sql.Connection; -import java.util.List; - -import org.mockito.MockitoAnnotations; -import org.testng.Assert; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Optional; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; - -import com.google.refine.extension.database.DBExtensionTestUtils; -import com.google.refine.extension.database.DBExtensionTests; -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseService; -import com.google.refine.extension.database.DatabaseServiceException; -import com.google.refine.extension.database.model.DatabaseColumn; -import com.google.refine.extension.database.model.DatabaseInfo; -import com.google.refine.extension.database.model.DatabaseRow; - - -public class MariaDBDatabaseServiceTest extends DBExtensionTests{ - - - - private DatabaseConfiguration testDbConfig; - - private String testTable; - - - @BeforeTest - @Parameters({ "mariaDbName", "mariaDbHost", "mariaDbPort", "mariaDbUser", "mariaDbPassword", "mariaDbTestTable"}) - public void beforeTest(@Optional(DEFAULT_MARIADB_NAME) String mariaDbName, @Optional(DEFAULT_MARIADB_HOST) String mariaDbHost, - @Optional(DEFAULT_MARIADB_PORT) String mariaDbPort, @Optional(DEFAULT_MARIADB_USER) String mariaDbUser, - @Optional(DEFAULT_MARIADB_PASSWORD) String mariaDbPassword, @Optional(DEFAULT_TEST_TABLE) String mariaDbTestTable) { - - MockitoAnnotations.initMocks(this); - - testDbConfig = new DatabaseConfiguration(); - testDbConfig.setDatabaseHost(mariaDbHost); - testDbConfig.setDatabaseName(mariaDbName); - testDbConfig.setDatabasePassword(mariaDbPassword); - testDbConfig.setDatabasePort(Integer.parseInt(mariaDbPort)); - testDbConfig.setDatabaseType(MariaDBDatabaseService.DB_NAME); - testDbConfig.setDatabaseUser(mariaDbUser); - testDbConfig.setUseSSL(false); - - testTable = mariaDbTestTable; - //DBExtensionTestUtils.initTestData(testDbConfig); - - DatabaseService.DBType.registerDatabase(MariaDBDatabaseService.DB_NAME, MariaDBDatabaseService.getInstance()); - - } - - @Test - public void testGetDatabaseUrl() { - MariaDBDatabaseService pgSqlService = (MariaDBDatabaseService)DatabaseService.get(MariaDBDatabaseService.DB_NAME); - String dbUrl = pgSqlService.getDatabaseUrl(testDbConfig); - //System.out.println("dbUrl:" + dbUrl); - Assert.assertNotNull(dbUrl); - Assert.assertEquals(dbUrl, DBExtensionTestUtils.getJDBCUrl(testDbConfig)); - } - - @Test - public void testGetConnection() { - try { - - MariaDBDatabaseService pgSqlService = (MariaDBDatabaseService)DatabaseService.get(MariaDBDatabaseService.DB_NAME); - Connection conn = pgSqlService.getConnection(testDbConfig); - - Assert.assertNotNull(conn); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testTestConnection() { - try { - MariaDBDatabaseService pgSqlService = (MariaDBDatabaseService)DatabaseService.get(MariaDBDatabaseService.DB_NAME); - - boolean result = pgSqlService.testConnection(testDbConfig); - Assert.assertEquals(result, true); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testConnect() { - try { - MariaDBDatabaseService pgSqlService = (MariaDBDatabaseService)DatabaseService.get(MariaDBDatabaseService.DB_NAME); - DatabaseInfo databaseInfo = pgSqlService.connect(testDbConfig); - Assert.assertNotNull(databaseInfo); - - } catch (DatabaseServiceException e) { - e.printStackTrace(); - } - } - - @Test - public void testExecuteQuery() { - - try { - - MariaDBDatabaseService pgSqlService = (MariaDBDatabaseService) DatabaseService - .get(MariaDBDatabaseService.DB_NAME); - DatabaseInfo databaseInfo = pgSqlService.testQuery(testDbConfig, "SELECT * FROM " + testTable); - - Assert.assertNotNull(databaseInfo); - - } catch (DatabaseServiceException e) { - e.printStackTrace(); - } - } - - @Test - public void testBuildLimitQuery() { - MariaDBDatabaseService pgSqlService = (MariaDBDatabaseService) DatabaseService.get(MariaDBDatabaseService.DB_NAME); - String limitQuery = pgSqlService.buildLimitQuery(100, 0, "SELECT * FROM " + testTable); - Assert.assertNotNull(limitQuery); - - Assert.assertEquals(limitQuery, "SELECT * FROM " + testTable + " LIMIT " + 100 + " OFFSET " + 0 + ";"); - - } - - @Test - public void testGetRows() { - try { - MariaDBDatabaseService pgSqlService = (MariaDBDatabaseService) DatabaseService - .get(MariaDBDatabaseService.DB_NAME); - List dbRows = pgSqlService.getRows(testDbConfig, "SELECT * FROM " + testTable); - - Assert.assertNotNull(dbRows); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testGetInstance() { - MariaDBDatabaseService instance = MariaDBDatabaseService.getInstance(); - Assert.assertNotNull(instance); - } - - @Test - public void testGetColumns() { - List dbColumns; - - try { - MariaDBDatabaseService pgSqlService = (MariaDBDatabaseService) DatabaseService - .get(MariaDBDatabaseService.DB_NAME); - - dbColumns = pgSqlService.getColumns(testDbConfig, "SELECT * FROM " + testTable); - - Assert.assertNotNull(dbColumns); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - -} diff --git a/extensions/database/test/com/google/refine/extension/database/mysql/MySQLConnectionManagerTest.java b/extensions/database/test/com/google/refine/extension/database/mysql/MySQLConnectionManagerTest.java deleted file mode 100644 index 70b560e7d..000000000 --- a/extensions/database/test/com/google/refine/extension/database/mysql/MySQLConnectionManagerTest.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.google.refine.extension.database.mysql; - -import java.sql.Connection; - -import org.mockito.MockitoAnnotations; -import org.testng.Assert; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Optional; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; - -import com.google.refine.extension.database.DBExtensionTests; -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseService; -import com.google.refine.extension.database.DatabaseServiceException; - -public class MySQLConnectionManagerTest extends DBExtensionTests { - - private DatabaseConfiguration testDbConfig; - - - @BeforeTest - @Parameters({ "mySqlDbName", "mySqlDbHost", "mySqlDbPort", "mySqlDbUser", "mySqlDbPassword", "mySqlTestTable"}) - public void beforeTest(@Optional(DEFAULT_MYSQL_DB_NAME) String mySqlDbName, @Optional(DEFAULT_MYSQL_HOST) String mySqlDbHost, - @Optional(DEFAULT_MYSQL_PORT) String mySqlDbPort, @Optional(DEFAULT_MYSQL_USER) String mySqlDbUser, - @Optional(DEFAULT_MYSQL_PASSWORD) String mySqlDbPassword, @Optional(DEFAULT_TEST_TABLE) String mySqlTestTable) { - - MockitoAnnotations.initMocks(this); - - testDbConfig = new DatabaseConfiguration(); - testDbConfig.setDatabaseHost(mySqlDbHost); - testDbConfig.setDatabaseName(mySqlDbName); - testDbConfig.setDatabasePassword(mySqlDbPassword); - testDbConfig.setDatabasePort(Integer.parseInt(mySqlDbPort)); - testDbConfig.setDatabaseType(MySQLDatabaseService.DB_NAME); - testDbConfig.setDatabaseUser(mySqlDbUser); - testDbConfig.setUseSSL(false); - - //testTable = mySqlTestTable; - // DBExtensionTestUtils.initTestData(testDbConfig); - - DatabaseService.DBType.registerDatabase(MySQLDatabaseService.DB_NAME, MySQLDatabaseService.getInstance()); - - } - - - @Test - public void testTestConnection() { - - try { - boolean conn = MySQLConnectionManager.getInstance().testConnection(testDbConfig); - Assert.assertEquals(conn, true); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testGetConnection() { - - try { - Connection conn = MySQLConnectionManager.getInstance().getConnection(testDbConfig, true); - Assert.assertNotNull(conn); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testShutdown() { - - try { - Connection conn = MySQLConnectionManager.getInstance().getConnection(testDbConfig, true); - Assert.assertNotNull(conn); - - MySQLConnectionManager.getInstance().shutdown(); - - if(conn != null) { - Assert.assertEquals(conn.isClosed(), true); - } - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - -} diff --git a/extensions/database/test/com/google/refine/extension/database/mysql/MySQLDatabaseServiceTest.java b/extensions/database/test/com/google/refine/extension/database/mysql/MySQLDatabaseServiceTest.java deleted file mode 100644 index ba51f3676..000000000 --- a/extensions/database/test/com/google/refine/extension/database/mysql/MySQLDatabaseServiceTest.java +++ /dev/null @@ -1,172 +0,0 @@ -package com.google.refine.extension.database.mysql; - -import java.sql.Connection; -import java.util.List; - -import org.mockito.MockitoAnnotations; -import org.testng.Assert; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Optional; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; - -import com.google.refine.extension.database.DBExtensionTestUtils; -import com.google.refine.extension.database.DBExtensionTests; -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseService; -import com.google.refine.extension.database.DatabaseServiceException; -import com.google.refine.extension.database.model.DatabaseColumn; -import com.google.refine.extension.database.model.DatabaseInfo; -import com.google.refine.extension.database.model.DatabaseRow; - - - -public class MySQLDatabaseServiceTest extends DBExtensionTests{ - - private DatabaseConfiguration testDbConfig; - private String testTable; - - @BeforeTest - @Parameters({ "mySqlDbName", "mySqlDbHost", "mySqlDbPort", "mySqlDbUser", "mySqlDbPassword", "mySqlTestTable"}) - public void beforeTest(@Optional(DEFAULT_MYSQL_DB_NAME) String mySqlDbName, @Optional(DEFAULT_MYSQL_HOST) String mySqlDbHost, - @Optional(DEFAULT_MYSQL_PORT) String mySqlDbPort, @Optional(DEFAULT_MYSQL_USER) String mySqlDbUser, - @Optional(DEFAULT_MYSQL_PASSWORD) String mySqlDbPassword, @Optional(DEFAULT_TEST_TABLE) String mySqlTestTable) { - - MockitoAnnotations.initMocks(this); - - testDbConfig = new DatabaseConfiguration(); - testDbConfig.setDatabaseHost(mySqlDbHost); - testDbConfig.setDatabaseName(mySqlDbName); - testDbConfig.setDatabasePassword(mySqlDbPassword); - testDbConfig.setDatabasePort(Integer.parseInt(mySqlDbPort)); - testDbConfig.setDatabaseType(MySQLDatabaseService.DB_NAME); - testDbConfig.setDatabaseUser(mySqlDbUser); - testDbConfig.setUseSSL(false); - - testTable = mySqlTestTable; - //DBExtensionTestUtils.initTestData(testDbConfig); - - DatabaseService.DBType.registerDatabase(MySQLDatabaseService.DB_NAME, MySQLDatabaseService.getInstance()); - - } - - - @Test - public void testGetDatabaseUrl() { - MySQLDatabaseService pgSqlService = (MySQLDatabaseService)DatabaseService.get(MySQLDatabaseService.DB_NAME); - String dbUrl = pgSqlService.getDatabaseUrl(testDbConfig); - //System.out.println("dbUrl:" + dbUrl); - Assert.assertNotNull(dbUrl); - Assert.assertEquals(dbUrl, DBExtensionTestUtils.getJDBCUrl(testDbConfig)); - } - - - @Test - public void testGetConnection() { - try { - - MySQLDatabaseService pgSqlService = (MySQLDatabaseService)DatabaseService.get(MySQLDatabaseService.DB_NAME); - Connection conn = pgSqlService.getConnection(testDbConfig); - - Assert.assertNotNull(conn); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testTestConnection() { - try { - MySQLDatabaseService pgSqlService = (MySQLDatabaseService)DatabaseService.get(MySQLDatabaseService.DB_NAME); - - boolean result = pgSqlService.testConnection(testDbConfig); - Assert.assertEquals(result, true); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testConnect() { - try { - MySQLDatabaseService pgSqlService = (MySQLDatabaseService)DatabaseService.get(MySQLDatabaseService.DB_NAME); - DatabaseInfo databaseInfo = pgSqlService.connect(testDbConfig); - Assert.assertNotNull(databaseInfo); - - } catch (DatabaseServiceException e) { - e.printStackTrace(); - } - } - - @Test - public void testExecuteQuery() { - - try { - - MySQLDatabaseService pgSqlService = (MySQLDatabaseService) DatabaseService - .get(MySQLDatabaseService.DB_NAME); - DatabaseInfo databaseInfo = pgSqlService.testQuery(testDbConfig, "SELECT * FROM " + testTable); - - Assert.assertNotNull(databaseInfo); - - } catch (DatabaseServiceException e) { - e.printStackTrace(); - } - } - - @Test - public void testBuildLimitQuery() { - MySQLDatabaseService pgSqlService = (MySQLDatabaseService) DatabaseService.get(MySQLDatabaseService.DB_NAME); - String limitQuery = pgSqlService.buildLimitQuery(100, 0, "SELECT * FROM " + testTable); - Assert.assertNotNull(limitQuery); - - Assert.assertEquals(limitQuery, "SELECT * FROM " + testTable + " LIMIT " + 100 + " OFFSET " + 0 + ";"); - - } - - @Test - public void testGetRows() { - try { - MySQLDatabaseService pgSqlService = (MySQLDatabaseService) DatabaseService - .get(MySQLDatabaseService.DB_NAME); - List dbRows = pgSqlService.getRows(testDbConfig, "SELECT * FROM " + testTable); - - Assert.assertNotNull(dbRows); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testGetInstance() { - MySQLDatabaseService instance = MySQLDatabaseService.getInstance(); - Assert.assertNotNull(instance); - } - - @Test - public void testGetColumns() { - List dbColumns; - - try { - MySQLDatabaseService pgSqlService = (MySQLDatabaseService) DatabaseService - .get(MySQLDatabaseService.DB_NAME); - - dbColumns = pgSqlService.getColumns(testDbConfig, "SELECT * FROM " + testTable); - - Assert.assertNotNull(dbColumns); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - - -} diff --git a/extensions/database/test/com/google/refine/extension/database/pgsql/PgSQLConnectionManagerTest.java b/extensions/database/test/com/google/refine/extension/database/pgsql/PgSQLConnectionManagerTest.java deleted file mode 100644 index 09b18bd11..000000000 --- a/extensions/database/test/com/google/refine/extension/database/pgsql/PgSQLConnectionManagerTest.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.google.refine.extension.database.pgsql; - -import java.sql.Connection; - -import org.mockito.MockitoAnnotations; -import org.testng.Assert; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Optional; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; - -import com.google.refine.extension.database.DBExtensionTests; -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseService; -import com.google.refine.extension.database.DatabaseServiceException; - - - -public class PgSQLConnectionManagerTest extends DBExtensionTests { - - private DatabaseConfiguration testDbConfig; - - - @BeforeTest - @Parameters({ "pgSqlDbName", "pgSqlDbHost", "pgSqlDbPort", "pgSqlDbUser", "pgSqlDbPassword", "pgSqlTestTable"}) - public void beforeTest(@Optional(DEFAULT_PGSQL_DB_NAME) String pgSqlDbName, @Optional(DEFAULT_PGSQL_HOST) String pgSqlDbHost, - @Optional(DEFAULT_PGSQL_PORT) String pgSqlDbPort, @Optional(DEFAULT_PGSQL_USER) String pgSqlDbUser, - @Optional(DEFAULT_PGSQL_PASSWORD) String pgSqlDbPassword, @Optional(DEFAULT_TEST_TABLE) String pgSqlTestTable) { - - MockitoAnnotations.initMocks(this); - - testDbConfig = new DatabaseConfiguration(); - testDbConfig.setDatabaseHost(pgSqlDbHost); - testDbConfig.setDatabaseName(pgSqlDbName); - testDbConfig.setDatabasePassword(pgSqlDbPassword); - testDbConfig.setDatabasePort(Integer.parseInt(pgSqlDbPort)); - testDbConfig.setDatabaseType(PgSQLDatabaseService.DB_NAME); - testDbConfig.setDatabaseUser(pgSqlDbUser); - testDbConfig.setUseSSL(false); - - //testTable = mySqlTestTable; - //DBExtensionTestUtils.initTestData(testDbConfig); - - DatabaseService.DBType.registerDatabase(PgSQLDatabaseService.DB_NAME, PgSQLDatabaseService.getInstance()); - - } - - - - @Test - public void testTestConnection() { - - try { - boolean isConnected = PgSQLConnectionManager.getInstance().testConnection(testDbConfig); - Assert.assertEquals(isConnected, true); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testGetConnection() { - - try { - Connection conn = PgSQLConnectionManager.getInstance().getConnection(testDbConfig, true); - Assert.assertNotNull(conn); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testShutdown() { - - try { - Connection conn = PgSQLConnectionManager.getInstance().getConnection(testDbConfig, true); - Assert.assertNotNull(conn); - - PgSQLConnectionManager.getInstance().shutdown(); - - if(conn != null) { - Assert.assertEquals(conn.isClosed(), true); - } - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - -} diff --git a/extensions/database/test/com/google/refine/extension/database/pgsql/PgSQLDatabaseServiceTest.java b/extensions/database/test/com/google/refine/extension/database/pgsql/PgSQLDatabaseServiceTest.java deleted file mode 100644 index 78b1ca8d2..000000000 --- a/extensions/database/test/com/google/refine/extension/database/pgsql/PgSQLDatabaseServiceTest.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.google.refine.extension.database.pgsql; - -import java.sql.Connection; -import java.util.List; - -import org.mockito.MockitoAnnotations; -import org.testng.Assert; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Optional; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; - -import com.google.refine.extension.database.DBExtensionTestUtils; -import com.google.refine.extension.database.DBExtensionTests; -import com.google.refine.extension.database.DatabaseConfiguration; -import com.google.refine.extension.database.DatabaseService; -import com.google.refine.extension.database.DatabaseServiceException; -import com.google.refine.extension.database.model.DatabaseColumn; -import com.google.refine.extension.database.model.DatabaseInfo; -import com.google.refine.extension.database.model.DatabaseRow; - - -public class PgSQLDatabaseServiceTest extends DBExtensionTests{ - - private DatabaseConfiguration testDbConfig; - private String testTable; - - - @BeforeTest - @Parameters({ "pgSqlDbName", "pgSqlDbHost", "pgSqlDbPort", "pgSqlDbUser", "pgSqlDbPassword", "pgSqlTestTable"}) - public void beforeTest(@Optional(DEFAULT_PGSQL_DB_NAME) String pgSqlDbName, @Optional(DEFAULT_PGSQL_HOST) String pgSqlDbHost, - @Optional(DEFAULT_PGSQL_PORT) String pgSqlDbPort, @Optional(DEFAULT_PGSQL_USER) String pgSqlDbUser, - @Optional(DEFAULT_PGSQL_PASSWORD) String pgSqlDbPassword, @Optional(DEFAULT_TEST_TABLE) String pgSqlTestTable) { - - MockitoAnnotations.initMocks(this); - testDbConfig = new DatabaseConfiguration(); - testDbConfig.setDatabaseHost(pgSqlDbHost); - testDbConfig.setDatabaseName(pgSqlDbName); - testDbConfig.setDatabasePassword(pgSqlDbPassword); - testDbConfig.setDatabasePort(Integer.parseInt(pgSqlDbPort)); - testDbConfig.setDatabaseType(PgSQLDatabaseService.DB_NAME); - testDbConfig.setDatabaseUser(pgSqlDbUser); - testDbConfig.setUseSSL(false); - - testTable = pgSqlTestTable; - //DBExtensionTestUtils.initTestData(testDbConfig); - - DatabaseService.DBType.registerDatabase(PgSQLDatabaseService.DB_NAME, PgSQLDatabaseService.getInstance()); - } - - - - @Test - public void testGetDatabaseUrl() { - PgSQLDatabaseService pgSqlService = (PgSQLDatabaseService)DatabaseService.get(PgSQLDatabaseService.DB_NAME); - String dbUrl = pgSqlService.getDatabaseUrl(testDbConfig); - - Assert.assertNotNull(dbUrl); - Assert.assertEquals(dbUrl, DBExtensionTestUtils.getJDBCUrl(testDbConfig)); - } - - - @Test - public void testGetConnection() { - try { - - PgSQLDatabaseService pgSqlService = (PgSQLDatabaseService)DatabaseService.get(PgSQLDatabaseService.DB_NAME); - Connection conn = pgSqlService.getConnection(testDbConfig); - - Assert.assertNotNull(conn); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testTestConnection() { - try { - PgSQLDatabaseService pgSqlService = (PgSQLDatabaseService)DatabaseService.get(PgSQLDatabaseService.DB_NAME); - - boolean result = pgSqlService.testConnection(testDbConfig); - Assert.assertEquals(result, true); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testConnect() { - try { - PgSQLDatabaseService pgSqlService = (PgSQLDatabaseService)DatabaseService.get(PgSQLDatabaseService.DB_NAME); - DatabaseInfo databaseInfo = pgSqlService.connect(testDbConfig); - Assert.assertNotNull(databaseInfo); - - } catch (DatabaseServiceException e) { - e.printStackTrace(); - } - } - - @Test - public void testExecuteQuery() { - - try { - - PgSQLDatabaseService pgSqlService = (PgSQLDatabaseService) DatabaseService - .get(PgSQLDatabaseService.DB_NAME); - DatabaseInfo databaseInfo = pgSqlService.testQuery(testDbConfig, "SELECT * FROM " + testTable); - - Assert.assertNotNull(databaseInfo); - - } catch (DatabaseServiceException e) { - e.printStackTrace(); - } - } - - @Test - public void testBuildLimitQuery() { - PgSQLDatabaseService pgSqlService = (PgSQLDatabaseService) DatabaseService.get(PgSQLDatabaseService.DB_NAME); - String limitQuery = pgSqlService.buildLimitQuery(100, 0, "SELECT * FROM " + testTable); - Assert.assertNotNull(limitQuery); - - Assert.assertEquals(limitQuery, "SELECT * FROM " + testTable + " LIMIT " + 100 + " OFFSET " + 0 + ";"); - - } - - @Test - public void testGetRows() { - try { - PgSQLDatabaseService pgSqlService = (PgSQLDatabaseService) DatabaseService - .get(PgSQLDatabaseService.DB_NAME); - List dbRows = pgSqlService.getRows(testDbConfig, "SELECT * FROM " + testTable); - - Assert.assertNotNull(dbRows); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void testGetInstance() { - PgSQLDatabaseService instance = PgSQLDatabaseService.getInstance(); - Assert.assertNotNull(instance); - } - - @Test - public void testGetColumns() { - List dbColumns; - - try { - PgSQLDatabaseService pgSqlService = (PgSQLDatabaseService) DatabaseService - .get(PgSQLDatabaseService.DB_NAME); - - dbColumns = pgSqlService.getColumns(testDbConfig, "SELECT * FROM " + testTable); - - Assert.assertNotNull(dbColumns); - - } catch (DatabaseServiceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - -} diff --git a/extensions/database/test/com/google/refine/extension/database/stub/RefineDbServletStub.java b/extensions/database/test/com/google/refine/extension/database/stub/RefineDbServletStub.java deleted file mode 100644 index c76e85c26..000000000 --- a/extensions/database/test/com/google/refine/extension/database/stub/RefineDbServletStub.java +++ /dev/null @@ -1,95 +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.extension.database.stub; - -import java.io.File; -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import com.google.refine.RefineServlet; -import com.google.refine.commands.Command; - -/** - * Exposes protected methods of com.google.refine.RefineServlet as public for unit testing - * - */ -public class RefineDbServletStub extends RefineServlet { - - private static File tempDir = null; - - //requirement of extending HttpServlet, not required for testing - private static final long serialVersionUID = 1L; - - public void wrapService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ - super.service(request, response); - } - - public String wrapGetCommandName(HttpServletRequest request){ - return super.getCommandKey(request); - } - - @Override - public File getTempDir() { - if (tempDir == null) { - try { - tempDir = File.createTempFile("refine-test-dir", ""); - tempDir.deleteOnExit(); - } catch (IOException e) { - throw new RuntimeException("Failed to create temp directory",e); - } - } - return tempDir; - } - - //-------------------helper methods-------------- - /** - * Helper method for inserting a mock object - * @param commandName - * @param command - */ - public void insertCommand(String commandName, Command command ){ - registerOneCommand("core/" + commandName, command); - } - - /** - * Helper method for clearing up after testing - * @param commandName - */ - public void removeCommand( String commandName ){ - unregisterCommand("core/" + commandName); - } -} diff --git a/extensions/database/test/conf/int_tests.xml b/extensions/database/test/conf/int_tests.xml deleted file mode 100644 index fcf2204bf..000000000 --- a/extensions/database/test/conf/int_tests.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/extensions/database/test/conf/travis-mariadb.sql b/extensions/database/test/conf/travis-mariadb.sql deleted file mode 100644 index c5716c5a8..000000000 --- a/extensions/database/test/conf/travis-mariadb.sql +++ /dev/null @@ -1,18 +0,0 @@ -CREATE DATABASE IF NOT EXISTS `test_db` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; -USE test_db; - -CREATE TABLE IF NOT EXISTS `test_table` ( - `id` int(11) NOT NULL, - `ue_id` char(8) NOT NULL, - `start_time` timestamp NOT NULL, - `end_date` date DEFAULT NULL, - `bytes_upload` int(11) NOT NULL, - `bytes_download` int(11) NOT NULL, - `mcc` char(3) DEFAULT NULL, - `mnc` char(3) NOT NULL, - `lac` varchar(11) DEFAULT NULL, - `imei` char(16) NOT NULL -); - -INSERT INTO test_table(id, ue_id, start_time, end_date, bytes_upload, bytes_download, mcc, mnc, lac, imei) - VALUES (1, '11100022', now(), now(), 1024, 2048, 321, 543, 12209823498, 1344498988877487); \ No newline at end of file diff --git a/extensions/database/test/conf/travis-mysql.sql b/extensions/database/test/conf/travis-mysql.sql deleted file mode 100644 index d2b53c80e..000000000 --- a/extensions/database/test/conf/travis-mysql.sql +++ /dev/null @@ -1,17 +0,0 @@ -USE test_db; - -CREATE TABLE IF NOT EXISTS `test_table` ( - `id` int(11) NOT NULL, - `ue_id` char(8) NOT NULL, - `start_time` timestamp NOT NULL, - `end_date` date DEFAULT NULL, - `bytes_upload` int(11) NOT NULL, - `bytes_download` int(11) NOT NULL, - `mcc` char(3) DEFAULT NULL, - `mnc` char(3) NOT NULL, - `lac` varchar(11) DEFAULT NULL, - `imei` char(16) NOT NULL -); - -INSERT INTO test_table(id, ue_id, start_time, end_date, bytes_upload, bytes_download, mcc, mnc, lac, imei) - VALUES (1, '11100022', now(), now(), 1024, 2048, 321, 543, 12209823498, 1344498988877487); \ No newline at end of file diff --git a/extensions/database/test/conf/travis-pgsql.sql b/extensions/database/test/conf/travis-pgsql.sql deleted file mode 100644 index f8299a964..000000000 --- a/extensions/database/test/conf/travis-pgsql.sql +++ /dev/null @@ -1,17 +0,0 @@ -USE test_db; - -CREATE TABLE IF NOT EXISTS test_table ( - id integer NOT NULL, - ue_id char(8) NOT NULL, - start_time timestamp NOT NULL, - end_date date DEFAULT NULL, - bytes_upload integer NOT NULL, - bytes_download integer NOT NULL, - mcc char(3) DEFAULT NULL, - mnc char(3) NOT NULL, - lac varchar(11) DEFAULT NULL, - imei char(16) NOT NULL -); - -INSERT INTO test_table(id, ue_id, start_time, end_date, bytes_upload, bytes_download, mcc, mnc, lac, imei) - VALUES (1, '11100022', now(), now(), 1024, 2048, 321, 543, 12209823498, 1344498988877487); \ No newline at end of file diff --git a/extensions/database/test/conf/unit_tests.xml b/extensions/database/test/conf/unit_tests.xml deleted file mode 100644 index 63c5729fb..000000000 --- a/extensions/database/test/conf/unit_tests.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/extensions/database/test/log4j-test.properties b/extensions/database/test/log4j-test.properties deleted file mode 100644 index 0ed0d9f64..000000000 --- a/extensions/database/test/log4j-test.properties +++ /dev/null @@ -1,5 +0,0 @@ -log4j.rootLogger=ERROR, console -log4j.logger.com.google.refine.extension.database=DEBUG - -log4j.appender.console=org.apache.log4j.ConsoleAppender -log4j.appender.console.layout=com.google.refine.logging.IndentingLayout