提交 c35d1f5b 编写于 作者: S serge@jkiss.org

Merge remote-tracking branch 'origin/devel' into devel

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>org.jkiss.dbeaver.ext.mockdata.nls</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: mockdata extension NLS
Bundle-SymbolicName: org.jkiss.dbeaver.ext.mockdata.nls
Bundle-Version: 1.0.0
Bundle-Release-Date: 20180606
Fragment-Host: org.jkiss.dbeaver.ext.mockdata
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-Vendor: JKISS
#Properties file for org.jkiss.dbeaver.ext.mockdata
Bundle-Vendor = JKISS
Bundle-Name = DBeaver Mock Data Support
mockdata.extension.name=\u041C\u0430\u0441\u0442\u0435\u0440 \u0413\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0438 \u0422\u0435\u0441\u0442\u043E\u0432\u044B\u0445 \u0414\u0430\u043D\u043D\u044B\u0445
command.mockdata.name=\u0413\u0435\u043D\u0435\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0422\u0435\u0441\u0442\u043E\u0432\u044B\u0435 \u0414\u0430\u043D\u043D\u044B\u0435
command.mockdata.description=\u0413\u0435\u043D\u0435\u0440\u0430\u0442\u043E\u0440 \u0422\u0435\u0441\u0442\u043E\u0432\u044B\u0445 \u0414\u0430\u043D\u043D\u044B\u0445
generator.numeric.constant.label=\u0427\u0438\u0441\u043B\u043E
generator.numeric.constant.description=\u0427\u0438\u0441\u043B\u043E\u0432\u0430\u044F \u043A\u043E\u043D\u0441\u0442\u0430\u043D\u0442\u0430
generator.numeric.constant.prop.value.label=\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435
generator.numeric.random.label=\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u043E\u0435 \u0427\u0438\u0441\u043B\u043E
generator.numeric.random.description=\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E
generator.numeric.sequence.label=\u0427\u0438\u0441\u043B\u043E\u0432\u0430\u044F \u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C
generator.numeric.sequence.description=\u041F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C \u0447\u0438\u0441\u0435\u043B \u0441 \u0437\u0430\u0434\u0430\u043D\u043D\u044B\u043C\u0438 \u0441\u0442\u0430\u0440\u0442\u043E\u043C, \u0448\u0430\u0433\u043E\u043C \u0438 \u043F\u043E\u0440\u044F\u0434\u043A\u043E\u043C
generator.numeric.sequence.property.start.label=\u0421\u0442\u0430\u0440\u0442
generator.numeric.sequence.property.start.description=\u041D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435
generator.numeric.step.property.start.label=\u0428\u0430\u0433
generator.numeric.step.property.start.description=\u0428\u0430\u0433 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F
generator.numeric.sequence.property.reverse.label=\u041E\u0431\u0440\u0430\u0442\u043D\u044B\u0439 \u043F\u043E\u0440\u044F\u0434\u043E\u043A
generator.numeric.sequence.property.reverse.description=\u041E\u0431\u0440\u0430\u0442\u043D\u044B\u0439 \u043F\u043E\u0440\u044F\u0434\u043E\u043A \u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u0438
generator.boolean.constant.label=\u041B\u043E\u0433\u0438\u0447\u0435\u0441\u043A\u0438\u0439
generator.boolean.constant.description=\u041B\u043E\u0433\u0438\u0447\u0435\u0441\u043A\u0430\u044F \u043A\u043E\u043D\u0441\u0442\u0430\u043D\u0442\u0430
generator.boolean.constant.property.value.label=\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435
generator.boolean.sequence.label=\u041B\u043E\u0433\u0438\u0447\u0435\u0441\u043A\u0430\u044F \u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C
generator.boolean.sequence.description=\u041D\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043C\u0430\u044F \u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C \u043B\u043E\u0433\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439
generator.boolean.sequence.property.initial.label=\u041D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0435
generator.boolean.sequence.property.order.label=\u041F\u043E\u0440\u044F\u0434\u043E\u043A
generator.boolean.sequence.property.order.value.initial=\u041F\u043E\u0441\u0442\u043E\u044F\u043D\u043D\u044B\u0439
generator.boolean.sequence.property.order.validValues=\u041F\u043E\u0441\u0442\u043E\u044F\u043D\u043D\u044B\u0439,\u041F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0439
generator.date.constant.label=\u0414\u0430\u0442\u0430
generator.date.constant.description=\u0414\u0430\u0442\u0430-\u043A\u043E\u043D\u0441\u0442\u0430\u043D\u0442\u0430
generator.date.constant.property.value.label=\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435
generator.date.constant.property.value.description=\u0424\u043E\u0440\u043C\u0430\u0442 \u0434\u0430\u0442\u044B: \u0414\u0414-\u041C\u041C-\u0413\u0413\u0413\u0413
generator.date.random.label=\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u0430\u044F \u0434\u0430\u0442\u0430
generator.date.random.description=\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u0430\u044F \u0434\u0430\u0442\u0430 \u0438\u0437 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\u0430
generator.date.random.property.start.label=\u041D\u0430\u0447\u0430\u043B\u044C\u043D\u0430\u044F \u0434\u0430\u0442\u0430
generator.date.random.property.start.description=\u041D\u0430\u0447\u0430\u043B\u044C\u043D\u0430\u044F \u0434\u0430\u0442\u0430 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\u0430 (\u0414\u0414-\u041C\u041C-\u0413\u0413\u0413\u0413)
generator.date.random.property.end.label=\u041A\u043E\u043D\u0435\u0447\u043D\u0430\u044F \u0434\u0430\u0442\u0430
generator.date.random.property.end.description=\u041A\u043E\u043D\u0435\u0447\u043D\u0430\u044F \u0434\u0430\u0442\u0430 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\u0430 (\u0414\u0414-\u041C\u041C-\u0413\u0413\u0413\u0413)
generator.date.sequence.label=\u0412\u0440\u0435\u043C\u0435\u043D\u043D\u0430\u044F \u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C
generator.date.sequence.description=\u041D\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043C\u0430\u044F \u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C \u0434\u0430\u0442
generator.date.sequence.property.start.label=\u041D\u0430\u0447\u0430\u043B\u044C\u043D\u0430\u044F \u0434\u0430\u0442\u0430
generator.date.sequence.property.start.description=\u0421\u0442\u0430\u0440\u0442\u043E\u0432\u0430\u044F \u0434\u0430\u0442\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u0438 (\u0414\u0414-\u041C\u041C-\u0413\u0413\u0413\u0413)
generator.date.sequence.property.step.label=\u0428\u0430\u0433
generator.date.sequence.property.step.description=\u0428\u0430\u0433 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F (\u0434\u043D\u0435\u0439)
generator.date.sequence.property.reverse.label=\u041E\u0431\u0440\u0430\u0442\u043D\u044B\u0439 \u043F\u043E\u0440\u044F\u0434\u043E\u043A
generator.date.sequence.property.reverse.description=\u041E\u0431\u0440\u0430\u0442\u043D\u044B\u0439 \u043F\u043E\u0440\u044F\u0434\u043E\u043A \u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u0438
generator.fk.label=\u0412\u043D\u0435\u0448\u043D\u0438\u0439 \u043A\u043B\u044E\u0447
generator.fk.description=\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0438\u0437 \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u043E\u0439 \u0442\u0430\u0431\u043B\u0438\u0446\u044B (\u043F\u043E \u043A\u043B\u044E\u0447\u0443)
generator.string.text.label=\u0422\u0435\u043A\u0441\u0442
generator.string.text.description=\u041F\u043E\u0434\u0441\u0442\u0440\u043E\u043A\u0438 \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u043E\u0439 \u0434\u043B\u0438\u043D\u044B \u0438\u0437 \u0448\u0430\u0431\u043B\u043E\u043D\u0430
generator.string.text.property.template.label=\u0428\u0430\u0431\u043B\u043E\u043D
generator.string.text.property.template.description=\u0418\u0441\u0442\u043E\u0447\u043D\u0438\u043A \u043F\u043E\u0434\u0441\u0442\u0440\u043E\u043A
generator.string.text.property.min.label=\u041C\u0438\u043D \u0434\u043B\u0438\u043D\u0430
generator.string.text.property.min.description=\u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0434\u043B\u0438\u043D\u0430 \u043F\u043E\u0434\u0441\u0442\u0440\u043E\u043A\u0438
generator.string.text.property.max.label=\u041C\u0430\u043A\u0441 \u0434\u043B\u0438\u043D\u0430
generator.string.text.property.max.description=\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0434\u043B\u0438\u043D\u0430 \u043F\u043E\u0434\u0441\u0442\u0440\u043E\u043A\u0438 (0 \u043E\u0437\u043D\u0430\u0447\u0430\u0435\u0442 \u0434\u043B\u0438\u043D\u0443 \u043A\u043E\u043B\u043E\u043D\u043A\u0438)
generator.string.uuid.label=UUID
generator.string.uuid.description=\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F UUID
generator.zero.label=NULL
generator.zero.description=NULL-\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435
source.. = src/
output.. = target/classes/
bin.includes = .,\
META-INF/,\
OSGI-INF/
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.jkiss.dbeaver</groupId>
<artifactId>dbeaver</artifactId>
<version>1.0.0</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.jkiss.dbeaver.ext.mockdata.nls</artifactId>
<version>1.0.0</version>
<packaging>eclipse-plugin</packaging>
</project>
tools_mockdata_message_title=\u0422\u0435\u0441\u0442\u043E\u0432\u044B\u0435 \u0414\u0430\u043D\u043D\u044B\u0435
tools_mockdata_error_notconnected=\u041D\u0435\u0442 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F \u043A \u0431\u0430\u0437\u0435 \u0434\u0430\u043D\u043D\u044B\u0445
tools_mockdata_error_tableonly=\u0422\u0435\u0441\u0442\u043E\u0432\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0441\u0433\u0435\u043D\u0435\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u044B \u0442\u043E\u043B\u044C\u043A\u043E \u0434\u043B\u044F \u0442\u0430\u0431\u043B\u0438\u0446\u044B
tools_mockdata_prop_nulls_label=% NULL-\u043E\u0432
tools_mockdata_prop_nulls_description=\u0414\u043E\u043B\u044F NULL-\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439 (%)
tools_mockdata_prop_lowercase_label=\u041D\u0438\u0436\u043D\u0438\u0439 \u0420\u0435\u0433\u0438\u0441\u0442\u0440
tools_mockdata_prop_uppercase_label=\u0412\u0435\u0440\u0445\u043D\u0438\u0439 \u0420\u0435\u0433\u0438\u0441\u0442\u0440
tools_mockdata_generator_boolean_sequence_prop_order_value_constant=\u041F\u043E\u0441\u0442\u043E\u044F\u043D\u043D\u044B\u0439
tools_mockdata_generator_boolean_sequence_prop_order_value_alternately=\u041F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0439
tools_mockdata_wizard_title=\u041C\u0430\u0441\u0442\u0435\u0440 \u0422\u0435\u0441\u0442\u043E\u0432\u044B\u0445 \u0414\u0430\u043D\u043D\u044B\u0445
tools_mockdata_wizard_page_name=\u0413\u0435\u043D\u0435\u0440\u0430\u0442\u043E\u0440 \u0422\u0435\u0441\u0442\u043E\u0432\u044B\u0445 \u0414\u0430\u043D\u043D\u044B\u0445
tools_mockdata_wizard_message_process_completed="{0}" \u043F\u0440\u043E\u0446\u0435\u0441\u0441 \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u043E\u0432\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043D
tools_mockdata_wizard_page_settings_group_settings=\u041E\u0431\u0449\u0438\u0435
tools_mockdata_wizard_page_settings_page_name=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0433\u0435\u043D\u0435\u0440\u0430\u0442\u043E\u0440\u0430 \u0442\u0435\u0441\u0442\u043E\u0432\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445
tools_mockdata_wizard_page_settings_page_description=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432 \u0433\u0435\u043D\u0435\u0440\u0430\u0442\u043E\u0440\u0430 \u0442\u0435\u0441\u0442\u043E\u0432\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445
tools_mockdata_wizard_page_settings_checkbox_remove_old_data=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u0442\u0430\u0440\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435
tools_mockdata_wizard_page_settings_confirm_delete_old_data_message=\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B, \u0447\u0442\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u0442\u0430\u0440\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435?
tools_mockdata_wizard_page_settings_combo_rows=\u0421\u0442\u0440\u043E\u043A
tools_mockdata_wizard_page_settings_text_entity=\u0422\u0430\u0431\u043B\u0438\u0446\u0430
tools_mockdata_wizard_task_generate_data=\u0413\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u044F \u0442\u0435\u0441\u0442\u043E\u0432\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445
tools_mockdata_wizard_task_insert_data=\u0412\u0441\u0442\u0430\u0432\u043A\u0430 \u0434\u0430\u043D\u043D\u044B\u0445
tools_mockdata_wizard_page_settings_group_generators=\u0413\u0435\u043D\u0435\u0440\u0430\u0442\u043E\u0440\u044B
tools_mockdata_wizard_page_settings_button_autoassign=\u041D\u0430\u0437\u043D\u0430\u0447\u0438\u0442\u044C \u0433\u0435\u043D\u0435\u0440\u0430\u0442\u043E\u0440\u044B
tools_mockdata_wizard_page_settings_button_autoassign_confirm=\u0413\u0435\u043D\u0435\u0440\u0430\u0442\u043E\u0440\u044B \u0434\u043B\u044F \u043A\u043E\u043B\u043E\u043D\u043E\u043A \u0431\u0443\u0434\u0443\u0442 \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u044B \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438. \u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C?
tools_mockdata_wizard_page_settings_generatorselector_attribute=\u041A\u043E\u043B\u043E\u043D\u043A\u0430
tools_mockdata_wizard_page_settings_generatorselector_generator=\u0413\u0435\u043D\u0435\u0440\u0430\u0442\u043E\u0440
tools_mockdata_wizard_page_settings_button_reset=\u0421\u0431\u0440\u043E\u0441
tools_mockdata_wizard_page_settings_button_info_notfound=\u0413\u0435\u043D\u0435\u0440\u0430\u0442\u043E\u0440\u044B \u0434\u043B\u044F \u043F\u043E\u0434\u0441\u0432\u0435\u0447\u0435\u043D\u043D\u044B\u0445 \u043A\u0440\u0430\u0441\u043D\u044B\u043C \u043A\u043E\u043B\u043E\u043D\u043E\u043A \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u044B. \u0414\u0430\u043D\u043D\u044B\u0435 \u0434\u043B\u044F \u043D\u0438\u0445 \u043D\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u0433\u0435\u043D\u0435\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u044B.
tools_mockdata_wizard_page_settings_button_info_noattributes=\u0412 \u0442\u0430\u0431\u043B\u0438\u0446\u0435 \u043D\u0435\u0442 \u043A\u043E\u043B\u043E\u043D\u043E\u043A
tools_mockdata_wizard_page_settings_notfound=\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D
tools_mockdata_wizard_negative_numeric_error=\u0412\u0441\u0435 \u0447\u0438\u0441\u043B\u043E\u0432\u044B\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0434\u043E\u043B\u0436\u043D\u044B \u0431\u044B\u0442\u044C \u043F\u043E\u043B\u043E\u0436\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u043C\u0438.
tools_mockdata_wizard_log_removing_from=\u0423\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u0440\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 \u0438\u0437 "{0}".\n
tools_mockdata_wizard_log_removing_error= \u041E\u0448\u0438\u0431\u043A\u0430 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0434\u0430\u043D\u043D\u044B\u0445:
tools_mockdata_wizard_log_rows_updated= \u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u0441\u0442\u0440\u043E\u043A: {0}\n
tools_mockdata_wizard_log_duration= \u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C: {0}ms\n\n
tools_mockdata_wizard_log_cleaning=\u041E\u0447\u0438\u0441\u0442\u043A\u0430 \u0441\u0442\u0430\u0440\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445
tools_mockdata_wizard_log_not_removed=\u0421\u0442\u0430\u0440\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u043D\u0435 \u0443\u0434\u0430\u043B\u0435\u043D\u044B.
tools_mockdata_wizard_log_inserting_into=\u0412\u0441\u0442\u0430\u0432\u043A\u0430 \u0441\u0433\u0435\u043D\u0435\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 \u0432 "{0}".\n
tools_mockdata_wizard_log_inserted_rows={0} \u0441\u0442\u0440\u043E\u043A \u0432\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u043E
tools_mockdata_wizard_log_error_inserting= \u041E\u0448\u0438\u0431\u043A\u0430 \u0432\u0441\u0442\u0430\u0432\u043A\u0438 \u0441\u0433\u0435\u043D\u0435\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445: {0}
tools_mockdata_wizard_log_error_generating= \u041E\u0448\u0438\u0431\u043A\u0430 \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u043E\u0432\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445: {0}
......@@ -286,13 +286,17 @@ meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSchema.description.descriptio
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSchema.owner.name=\u6240\u6709\u8005
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSchema.owner.description=
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.incrementBy.name=\u6B65\u957F
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.incrementBy.description=
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.incrementBy.description=\u8BE5\u5E8F\u5217\u7684\u6B65\u957F
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.lastValue.name=\u6700\u540E\u503C
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.lastValue.description=
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.lastValue.description=\u8BE5\u5E8F\u5217\u7684\u6700\u540E\u503C
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.maxValue.name=\u6700\u5927\u503C
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.maxValue.description=
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.maxValue.description=\u8BE5\u5E8F\u5217\u7684\u6700\u5927\u503C
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.minValue.name=\u6700\u5C0F\u503C
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.minValue.description=
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.minValue.description=\u8BE5\u5E8F\u5217\u7684\u6700\u5C0F\u503C
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.cacheValue.name=\u7F13\u5B58
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.cacheValue.description=\u8BE5\u5E8F\u5217\u7684\u7F13\u5B58
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.cycled.name=\u5FAA\u73AF\u7684
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.cycled.description=\u8BE5\u5E8F\u5217\u662F\u5426\u5FAA\u73AF
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreTable.hasOids.name=\u6709 Oid
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreTable.hasOids.description=
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreTable.subTables.name=\u5B50\u8868
......
......@@ -21,68 +21,15 @@
<update label="DBeaver Universal Database Manager" url="https://dbeaver.io/"/>
</url>
<plugin
id="org.jkiss.utils.nls"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin id="org.jkiss.utils.nls" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.jkiss.dbeaver.model.nls" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.jkiss.dbeaver.runtime.ide.core.nls" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.jkiss.dbeaver.core.nls" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.jkiss.dbeaver.ui.nls" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.jkiss.dbeaver.ext.erd.nls" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.jkiss.dbeaver.ext.import_config.nls" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.jkiss.dbeaver.ext.ui.locks.nls" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.jkiss.dbeaver.ext.mockdata.nls" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin
id="org.jkiss.dbeaver.model.nls"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.jkiss.dbeaver.runtime.ide.core.nls"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.jkiss.dbeaver.core.nls"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.jkiss.dbeaver.ui.nls"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.jkiss.dbeaver.ext.erd.nls"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.jkiss.dbeaver.ext.import_config.nls"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.jkiss.dbeaver.ext.ui.locks.nls"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
</feature>
......@@ -58,6 +58,7 @@
<module>bundles/org.jkiss.dbeaver.ext.sqlite.nls</module>
<module>bundles/org.jkiss.dbeaver.ext.teradata.nls</module>
<module>bundles/org.jkiss.dbeaver.ext.vertica.nls</module>
<module>bundles/org.jkiss.dbeaver.ext.mockdata.nls</module>
<module>features/org.jkiss.dbeaver.ext.generic.nls.feature</module>
<!-- Features NLS -->
......
......@@ -735,19 +735,21 @@ public class ResultSetViewer extends Viewer
}
private void savePresentationSettings() {
IDialogSettings pSections = ResultSetUtils.getViewerSettings(SETTINGS_SECTION_PRESENTATIONS);
for (Map.Entry<ResultSetPresentationDescriptor, PresentationSettings> pEntry : presentationSettings.entrySet()) {
if (pEntry.getKey() == null) {
continue;
}
String pId = pEntry.getKey().getId();
PresentationSettings settings = pEntry.getValue();
IDialogSettings pSection = UIUtils.getSettingsSection(pSections, pId);
if ((decorator.getDecoratorFeatures() & IResultSetDecorator.FEATURE_PANELS) != 0) {
IDialogSettings pSections = ResultSetUtils.getViewerSettings(SETTINGS_SECTION_PRESENTATIONS);
for (Map.Entry<ResultSetPresentationDescriptor, PresentationSettings> pEntry : presentationSettings.entrySet()) {
if (pEntry.getKey() == null) {
continue;
}
String pId = pEntry.getKey().getId();
PresentationSettings settings = pEntry.getValue();
IDialogSettings pSection = UIUtils.getSettingsSection(pSections, pId);
pSection.put("enabledPanelIds", CommonUtils.joinStrings(",", settings.enabledPanelIds));
pSection.put("activePanelId", settings.activePanelId);
pSection.put("panelRatio", settings.panelRatio);
pSection.put("panelsVisible", settings.panelsVisible);
pSection.put("enabledPanelIds", CommonUtils.joinStrings(",", settings.enabledPanelIds));
pSection.put("activePanelId", settings.activePanelId);
pSection.put("panelRatio", settings.panelRatio);
pSection.put("panelsVisible", settings.panelsVisible);
}
}
}
......@@ -2842,7 +2844,7 @@ public class ResultSetViewer extends Viewer
// Update status (update execution statistics)
updateStatusMessage();
}
updateFiltersText(error == null);
updateFiltersText(true);
updateToolbar();
fireResultSetLoad();
}
......
......@@ -24,8 +24,13 @@ import org.eclipse.swt.dnd.DropTargetAdapter;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.TextTransfer;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.data.DBDAttributeBinding;
import org.jkiss.dbeaver.model.sql.SQLDialect;
import org.jkiss.dbeaver.model.sql.SQLUtils;
import org.jkiss.dbeaver.model.struct.DBSDataContainer;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.runtime.ui.DBUserInterface;
import org.jkiss.dbeaver.ui.controls.lightgrid.LightGrid;
import org.jkiss.dbeaver.ui.controls.resultset.IResultSetDecorator;
......@@ -57,7 +62,16 @@ public class GroupingResultsDecorator implements IResultSetDecorator {
@Override
public String getEmptyDataDescription() {
return "Drag-and-drop results column(s) here to create grouping\nPress CONTROL to configure grouping settings";
DBPDataSource dataSource = container.getResultSetController().getDataContainer().getDataSource();
if (dataSource == null) {
return "No connected to database";
}
SQLDialect dialect = SQLUtils.getDialectFromDataSource(dataSource);
if (dialect == null || !dialect.supportsSubqueries()) {
return "Grouping is not supported\nby datasource '" + dataSource.getContainer().getDriver().getFullName() + "'";
} else {
return "Drag-and-drop results column(s) here to create grouping\nPress CONTROL to configure grouping settings";
}
}
@Override
......
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2018 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jkiss.dbeaver.ext.erd.command;
import org.eclipse.gef.commands.Command;
import org.jkiss.dbeaver.ext.erd.figures.NoteFigure;
import org.jkiss.dbeaver.ext.erd.model.ERDNote;
/**
* Change note text
*/
public class NoteSetTextCommand extends Command {
private ERDNote note;
private NoteFigure figure;
private String newText;
private String oldText;
public NoteSetTextCommand(ERDNote note, NoteFigure figure, String newText) {
super("Set note text");
this.note = note;
this.figure = figure;
this.oldText = this.note.getName();
this.newText = newText;
}
@Override
public void execute() {
note.setObject(newText);
figure.setText(newText);
}
@Override
public void undo() {
note.setObject(oldText);
figure.setText(oldText);
}
}
\ No newline at end of file
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
* Copyright (C) 2010-2018 Serge Rider (serge@jkiss.org)
* Copyright (C) 2011-2012 Eugene Fradkin (eugene.fradkin@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
......@@ -28,6 +28,8 @@ import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.Request;
import org.eclipse.gef.RequestConstants;
import org.jkiss.dbeaver.ext.erd.ERDMessages;
import org.jkiss.dbeaver.ext.erd.command.EntityAddCommand;
import org.jkiss.dbeaver.ext.erd.command.NoteSetTextCommand;
import org.jkiss.dbeaver.ext.erd.figures.NoteFigure;
import org.jkiss.dbeaver.ext.erd.model.ERDNote;
import org.jkiss.dbeaver.ext.erd.model.EntityDiagram;
......@@ -73,21 +75,12 @@ public class NotePart extends NodePart
@Override
public void performRequest(Request request)
{
if (request.getType() == RequestConstants.REQ_DIRECT_EDIT)
{
/*
if (request instanceof DirectEditRequest
&& !directEditHitTest(((DirectEditRequest) request).getLocation().getCopy()))
return;
performDirectEdit();
*/
} else if (request.getType() == RequestConstants.REQ_OPEN) {
if (request.getType() == RequestConstants.REQ_OPEN) {
final String newText = EditTextDialog.editText(getViewer().getControl().getShell(), ERDMessages.part_note_title, getNote().getObject());
if (newText != null) {
getNote().setObject(newText);
((NoteFigure)getFigure()).setText(newText);
NoteSetTextCommand command = new NoteSetTextCommand(getNote(), (NoteFigure) getFigure(), newText);
getViewer().getEditDomain().getCommandStack().execute(command);
}
//getTable().openEditor();
}
}
......
#Properties file for org.jkiss.dbeaver.ext.mockdata
Bundle-Vendor = JKISS
Bundle-Name = DBeaver Mock Data Support
\ No newline at end of file
Bundle-Name = DBeaver Mock Data Support
mockdata.extension.name=Mock data generator
command.mockdata.name=Generate Mock Data
command.mockdata.description=Mock Data Generator
generator.numeric.constant.label=Numeric Constant
generator.numeric.constant.description=Constant numeric value
generator.numeric.constant.prop.value.label=Value
generator.numeric.random.label=Numeric Random
generator.numeric.random.description=Random numeric value
generator.numeric.sequence.label=Numeric Sequence
generator.numeric.sequence.description=Sequence of numbers with adjustable start, step and order
generator.numeric.sequence.property.start.label=Start value
generator.numeric.sequence.property.start.description=Initial sequence value
generator.numeric.sequence.property.step.label=Step
generator.numeric.sequence.property.step.description=Sequence increment step
generator.numeric.sequence.property.reverse.label=Reverse order
generator.numeric.sequence.property.reverse.description=Reverse sequence order
generator.boolean.constant.label=Boolean Constant
generator.boolean.constant.description=Constant boolean value
generator.boolean.constant.property.value.label=Value
generator.boolean.sequence.label=Boolean Sequence
generator.boolean.sequence.description=Adjustable sequence of boolean values
generator.boolean.sequence.property.initial.label=Initial
generator.boolean.sequence.property.order.label=Order
generator.boolean.sequence.property.order.value.initial=Constant
generator.boolean.sequence.property.order.validValues=Constant,Alternately
generator.date.constant.label=Date Constant
generator.date.constant.description=Date constant value
generator.date.constant.property.value.label=Value
generator.date.constant.property.value.description=Date format: DD-MM-YYYY
generator.date.random.label=Date Random
generator.date.random.description=Random date value from range
generator.date.random.property.start.label=Start date
generator.date.random.property.start.description=Date range start (DD-MM-YYYY)
generator.date.random.property.end.label=End date
generator.date.random.property.end.description=Date range end (DD-MM-YYYY)
generator.date.sequence.label=Date Sequence
generator.date.sequence.description=Adjustable sequence of dates
generator.date.sequence.property.start.label=Start date
generator.date.sequence.property.start.description=Sequence start date (DD-MM-YYYY)
generator.date.sequence.property.step.label=Step
generator.date.sequence.property.step.description=Sequence increment step (days)
generator.date.sequence.property.reverse.label=Reverse order
generator.date.sequence.property.reverse.description=Reverse sequence order
generator.fk.label=FK
generator.fk.description=Value from associated table (FK)
generator.string.text.label=Text
generator.string.text.description=Random length substrings from the template text
generator.string.text.property.template.label=Template
generator.string.text.property.template.description=Source of substrings
generator.string.text.property.template.value=Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
generator.string.text.property.min.label=Min Length
generator.string.text.property.min.description=Minimum substring length
generator.string.text.property.max.label=Max Length
generator.string.text.property.max.description=Maximum length (0 means the column length)
generator.string.uuid.label=UUID
generator.string.uuid.description=UUID random value
generator.zero.label=NULL
generator.zero.description=NULL value
......@@ -3,7 +3,7 @@
<plugin>
<extension-point id="org.jkiss.dbeaver.mockGenerator" name="Mock data generator" schema="schema/org.jkiss.dbeaver.mockGenerator.exsd"/>
<extension-point id="org.jkiss.dbeaver.mockGenerator" name="%mockdata.extension.name" schema="schema/org.jkiss.dbeaver.mockGenerator.exsd"/>
<extension point="org.eclipse.ui.handlers">
<handler commandId="org.jkiss.dbeaver.ext.mockdata.resultset.mockdata" class="org.jkiss.dbeaver.ext.mockdata.handlers.ResultSetMockDataHandler">
......@@ -29,7 +29,7 @@
class="org.jkiss.dbeaver.ext.mockdata.MockDataGenerateTool"
description="Mock Data"
id="org.jkiss.dbeaver.ext.mockdata.MockDataGenerateTool"
label="Generate Mock Data"
label="%command.mockdata.name"
singleton="false">
<objectType name="org.jkiss.dbeaver.model.struct.DBSDataManipulator" forceCheck="true"/>
......@@ -38,7 +38,7 @@
</extension>
<extension point="org.eclipse.ui.commands">
<command id="org.jkiss.dbeaver.ext.mockdata.resultset.mockdata" name="Generate Mock Data" description="Mock Data Generator" categoryId="org.jkiss.dbeaver.core.rs"/>
<command id="org.jkiss.dbeaver.ext.mockdata.resultset.mockdata" name="%command.mockdata.name" description="%command.mockdata.description" categoryId="org.jkiss.dbeaver.core.rs"/>
</extension>
<extension point="org.eclipse.ui.commandImages">
......@@ -54,7 +54,7 @@
<menuContribution allPopups="false" locationURI="popup:org.eclipse.ui.popup.any?after=results_export">
<command
commandId="org.jkiss.dbeaver.ext.mockdata.resultset.mockdata"
label="Generate Mock Data">
label="%command.mockdata.name">
<visibleWhen checkEnabled="true"/>
</command>
</menuContribution>
......@@ -64,48 +64,48 @@
<generator
id="numericConstantGenerator"
label="Numeric Constant"
description="Constant numeric value"
label="%generator.numeric.constant.label"
description="%generator.numeric.constant.description"
class="org.jkiss.dbeaver.ext.mockdata.generator.ConstantGenerator">
<type kind="NUMERIC"/>
<propertyGroup label="General">
<property id="value" label="Value" type="numeric" defaultValue="0"/>
<property id="value" label="%generator.numeric.constant.prop.value.label" type="numeric" defaultValue="0"/>
</propertyGroup>
</generator>
<generator
id="numericRandomGenerator"
label="Numeric Random"
description="Random numeric values"
label="%generator.numeric.random.label"
description="%generator.numeric.random.description"
class="org.jkiss.dbeaver.ext.mockdata.generator.NumericRandomGenerator">
<type kind="NUMERIC"/>
</generator>
<generator
id="numericSequenceGenerator"
label="Numeric Sequence"
description="Sequence of numbers with adjustable start, step and order"
label="%generator.numeric.sequence.label"
description="%generator.numeric.sequence.description"
class="org.jkiss.dbeaver.ext.mockdata.generator.NumericSequenceGenerator"
tags="id,number,order">
<type kind="NUMERIC"/>
<propertyGroup label="General">
<property id="start" label="Start value" type="long" defaultValue="1" description="Initial sequence value"/>
<property id="step" label="Increment step" type="long" defaultValue="1" description="Sequence increment step"/>
<property id="reverse" label="Reverse order" type="boolean" defaultValue="FALSE" description="Reverse the sequence order"/>
<property id="start" label="%generator.numeric.sequence.property.start.label" type="long" defaultValue="1" description="%generator.numeric.sequence.property.start.description"/>
<property id="step" label="%generator.numeric.sequence.property.step.label" type="long" defaultValue="1" description="%generator.numeric.sequence.property.step.description"/>
<property id="reverse" label="%generator.numeric.sequence.property.reverse.label" type="boolean" defaultValue="FALSE" description="%generator.numeric.sequence.property.reverse.description"/>
</propertyGroup>
</generator>
<generator
id="booleanConstantGenerator"
label="Boolean Constant"
description="Constant boolean value"
label="%generator.boolean.constant.label"
description="%generator.boolean.constant.description"
class="org.jkiss.dbeaver.ext.mockdata.generator.ConstantGenerator">
<type kind="BOOLEAN"/>
<propertyGroup label="General">
<property id="value" label="Value" type="boolean" defaultValue="TRUE"/>
<property id="value" label="%generator.boolean.constant.property.value.label" type="boolean" defaultValue="TRUE"/>
</propertyGroup>
</generator>
......@@ -119,60 +119,60 @@
<generator
id="booleanSequenceGenerator"
label="Boolean Sequence"
description="Adjustable sequence of boolean values"
label="%generator.boolean.sequence.label"
description="%generator.boolean.sequence.description"
class="org.jkiss.dbeaver.ext.mockdata.generator.BooleanSequenceGenerator">
<type kind="BOOLEAN"/>
<propertyGroup label="General">
<property id="initial" label="Initial" type="boolean" defaultValue="TRUE"/>
<property id="order" label="Order" type="string" defaultValue="CONSTANT" validValues="ALTERNATELY,CONSTANT"/>
<property id="initial" label="%generator.boolean.sequence.property.initial.label" type="boolean" defaultValue="TRUE"/>
<property id="order" label="%generator.boolean.sequence.property.order.label" type="string" defaultValue="%generator.boolean.sequence.property.order.value.initial" validValues="%generator.boolean.sequence.property.order.validValues"/>
</propertyGroup>
</generator>
<generator
id="dateConstantGenerator"
label="Date Constant"
description="Constant date value"
label="%generator.date.constant.label"
description="%generator.date.constant.description"
class="org.jkiss.dbeaver.ext.mockdata.generator.ConstantGenerator">
<type kind="DATETIME"/>
<propertyGroup label="General">
<property id="value" label="Value" type="string" description="Date format: DD-MM-YYYY"/>
<property id="value" label="%generator.date.constant.property.value.label" type="string" description="%generator.date.constant.property.value.description"/>
</propertyGroup>
</generator>
<generator
id="dateRandomGenerator"
label="Date Random"
description="Random date values"
label="%generator.date.random.label"
description="%generator.date.random.description"
class="org.jkiss.dbeaver.ext.mockdata.generator.DateRandomGenerator">
<type kind="DATETIME"/>
<propertyGroup label="General">
<property id="startDate" label="Start date" type="string" description="Date range start (DD-MM-YYYY)"/>
<property id="endDate" label="End date" type="string" description="Date range end (DD-MM-YYYY)"/>
<property id="startDate" label="%generator.date.random.property.start.label" type="string" description="%generator.date.random.property.start.description"/>
<property id="endDate" label="%generator.date.random.property.end.label" type="string" description="%generator.date.random.property.end.description"/>
</propertyGroup>
</generator>
<generator
id="dateSequenceGenerator"
label="Date Sequence"
description="Adjustable sequence of dates"
label="%generator.date.sequence.label"
description="%generator.date.sequence.description"
class="org.jkiss.dbeaver.ext.mockdata.generator.DateSequenceGenerator">
<type kind="DATETIME"/>
<propertyGroup label="General">
<property id="startDate" label="Start date" type="string" defaultValue="${now as dd-MM-yyyy}" description="Sequence start date (DD-MM-YYYY)"/>
<property id="step" label="Increment step" type="integer" defaultValue="1" description="Sequence increment step (days)"/>
<property id="reverse" label="Reverse order" type="boolean" defaultValue="FALSE" description="Reverse sequence order"/>
<property id="startDate" label="%generator.date.sequence.property.start.label" type="string" defaultValue="${now as dd-MM-yyyy}" description="%generator.date.sequence.property.start.description"/>
<property id="step" label="%generator.date.sequence.property.step.label" type="integer" defaultValue="1" description="%generator.date.sequence.property.step.description"/>
<property id="reverse" label="%generator.date.sequence.property.reverse.label" type="boolean" defaultValue="FALSE" description="%generator.date.sequence.property.reverse.description"/>
</propertyGroup>
</generator>
<generator
id="fkGenerator"
label="FK"
description="Values from associated table (FK)"
label="%generator.fk.label"
description="%generator.fk.description"
class="org.jkiss.dbeaver.ext.mockdata.generator.FKGenerator">
<!--
<propertyGroup label="General">
......@@ -195,24 +195,24 @@
<generator
id="stringTextGenerator"
label="Text"
description="Random length substrings from the 'Lorem ipsum' text"
label="%generator.string.text.label"
description="%generator.string.text.description"
class="org.jkiss.dbeaver.ext.mockdata.generator.StringTextGenerator"
tags="text,paragraph,chapter">
<type kind="STRING"/>
<propertyGroup label="General">
<property id="template" label="Template" type="string" description="Source of substrings"
defaultValue="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."/>
<property id="minLength" label="Min Length" type="integer" defaultValue="1" description="Minimum length"/>
<property id="maxLength" label="Max Length" type="integer" defaultValue="100" description="Maximum length (0 means the column length)"/>
<property id="template" label="%generator.string.text.property.template.label" type="string" description="%generator.string.text.property.template.description"
defaultValue="%generator.string.text.property.template.value"/>
<property id="minLength" label="%generator.string.text.property.min.label" type="integer" defaultValue="1" description="%generator.string.text.property.min.description"/>
<property id="maxLength" label="%generator.string.text.property.max.label" type="integer" defaultValue="100" description="%generator.string.text.property.max.description"/>
</propertyGroup>
</generator>
<generator
id="stringUuidGenerator"
label="UUID"
description="UUID random values"
label="%generator.string.uuid.label"
description="%generator.string.uuid.label"
class="org.jkiss.dbeaver.ext.mockdata.generator.StringUuidGenerator"
tags="id,uuid">
<type kind="STRING"/>
......@@ -220,8 +220,8 @@
<generator
id="zeroGenerator"
label="NULL"
description="NULL values"
label="%generator.zero.label"
description="%generator.zero.description"
class="org.jkiss.dbeaver.ext.mockdata.generator.NullGenerator">
<type kind="BOOLEAN"/>
<type kind="DATETIME"/>
......
......@@ -19,6 +19,7 @@ package org.jkiss.dbeaver.ext.mockdata;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IImportWizard;
import org.eclipse.ui.IWorkbench;
......@@ -153,7 +154,7 @@ public class MockDataExecuteWizard extends AbstractToolWizard<DBSDataManipulato
public boolean executeProcess(DBRProgressMonitor monitor, DBSDataManipulator dataManipulator) throws IOException {
DBCExecutionContext context = dataManipulator.getDataSource().getDefaultContext(true);
try (DBCSession session = context.openSession(monitor, DBCExecutionPurpose.USER, MockDataMessages.tools_mockdata_generate_data_task)) {
try (DBCSession session = context.openSession(monitor, DBCExecutionPurpose.USER, MockDataMessages.tools_mockdata_wizard_task_generate_data)) {
DBCTransactionManager txnManager = DBUtils.getTransactionManager(session.getExecutionContext());
boolean autoCommit;
try {
......@@ -165,11 +166,11 @@ public class MockDataExecuteWizard extends AbstractToolWizard<DBSDataManipulato
AbstractExecutionSource executionSource = new AbstractExecutionSource(dataManipulator, session.getExecutionContext(), this);
boolean success = true;
monitor.beginTask("Generate Mock Data", 3);
monitor.beginTask(MockDataMessages.tools_mockdata_wizard_task_generate_data, 3);
ArrayList<DBEPersistAction> persistActions = new ArrayList<>();
if (mockDataSettings.isRemoveOldData()) {
logPage.appendLog("Removing old data from the '" + dataManipulator.getName() + "'.\n");
monitor.subTask("Cleanup old data");
logPage.appendLog(NLS.bind(MockDataMessages.tools_mockdata_wizard_log_removing_from, dataManipulator.getName()));
monitor.subTask(MockDataMessages.tools_mockdata_wizard_log_cleaning);
DBCStatistics deleteStats = new DBCStatistics();
try {
dataManipulator.truncateData(session, executionSource);
......@@ -178,7 +179,7 @@ public class MockDataExecuteWizard extends AbstractToolWizard<DBSDataManipulato
}
} catch (Exception e) {
success = false;
String message = " Error removing the data: " + e.getMessage();
String message = NLS.bind(MockDataMessages.tools_mockdata_wizard_log_removing_error, e.getMessage());
log.error(message, e);
logPage.appendLog(message + "\n\n", true);
}
......@@ -189,10 +190,10 @@ public class MockDataExecuteWizard extends AbstractToolWizard<DBSDataManipulato
false);
logPage.appendLog(" The insert data script:\n " + scriptText + "\n\n");
}
logPage.appendLog(" Rows updated: " + deleteStats.getRowsUpdated() + "\n");
logPage.appendLog(" Duration: " + deleteStats.getExecuteTime() + "ms\n\n");
// logPage.appendLog(NLS.bind(MockDataMessages.tools_mockdata_wizard_log_rows_updated, deleteStats.getRowsUpdated())); no reason because trancate
logPage.appendLog(NLS.bind(MockDataMessages.tools_mockdata_wizard_log_duration, deleteStats.getExecuteTime()));
} else {
logPage.appendLog("Old data isn't removed.\n\n");
logPage.appendLog(MockDataMessages.tools_mockdata_wizard_log_not_removed);
}
if (!success) {
......@@ -200,9 +201,9 @@ public class MockDataExecuteWizard extends AbstractToolWizard<DBSDataManipulato
}
try {
monitor.subTask("Insert data");
monitor.subTask(MockDataMessages.tools_mockdata_wizard_task_insert_data);
logPage.appendLog("Inserting mock data into the '" + dataManipulator.getName() + "'.\n");
logPage.appendLog(NLS.bind(MockDataMessages.tools_mockdata_wizard_log_inserting_into, dataManipulator.getName()));
DBCStatistics insertStats = new DBCStatistics();
persistActions = new ArrayList<>();
......@@ -234,7 +235,7 @@ public class MockDataExecuteWizard extends AbstractToolWizard<DBSDataManipulato
}
int counter = 0;
monitor.beginTask("Insert data", (int) rowsNumber);
monitor.beginTask(MockDataMessages.tools_mockdata_wizard_task_insert_data, (int) rowsNumber);
boolean hasMiltiUniqs = false;
Set<String> miltiUniqColumns = new HashSet<>();
......@@ -263,7 +264,7 @@ public class MockDataExecuteWizard extends AbstractToolWizard<DBSDataManipulato
txnManager.commit(session);
}
monitor.subTask(String.valueOf(counter) + " rows inserted");
monitor.subTask(NLS.bind(MockDataMessages.tools_mockdata_wizard_log_inserted_rows, String.valueOf(counter)));
monitor.worked(BATCH_SIZE);
}
......@@ -356,11 +357,11 @@ public class MockDataExecuteWizard extends AbstractToolWizard<DBSDataManipulato
false);
logPage.appendLog(" The insert data script:\n " + scriptText + "\n\n");
}
logPage.appendLog(" Rows updated: " + insertStats.getRowsUpdated() + "\n");
logPage.appendLog(" Duration: " + insertStats.getExecuteTime() + "ms\n\n");
logPage.appendLog(NLS.bind(MockDataMessages.tools_mockdata_wizard_log_rows_updated, insertStats.getRowsUpdated()));
logPage.appendLog(NLS.bind(MockDataMessages.tools_mockdata_wizard_log_duration, insertStats.getExecuteTime()));
} catch (DBException e) {
String message = " Error inserting mock data: " + e.getMessage();
String message = NLS.bind(MockDataMessages.tools_mockdata_wizard_log_error_inserting, e.getMessage());
log.error(message, e);
logPage.appendLog(message + "\n\n", true);
}
......@@ -373,7 +374,7 @@ public class MockDataExecuteWizard extends AbstractToolWizard<DBSDataManipulato
}
private void processGeneratorException(Exception e) {
String message = " Error generating mock data: " + e.getMessage();
String message = NLS.bind(MockDataMessages.tools_mockdata_wizard_log_error_generating, e.getMessage());
log.error(message, e);
logPage.appendLog(message + "\n\n", true);
}
......
......@@ -54,7 +54,7 @@ public class MockDataGenerateTool implements IExternalTool {
return;
}
if (mockDataSettings.isRemoveOldData()) {
if (!UIUtils.confirmAction(getShell(), MockDataMessages.tools_mockdata_wizard_title, MockDataMessages.tools_mockdata_confirm_delete_old_data_message)) {
if (!UIUtils.confirmAction(getShell(), MockDataMessages.tools_mockdata_wizard_title, MockDataMessages.tools_mockdata_wizard_page_settings_confirm_delete_old_data_message)) {
return;
}
}
......@@ -78,7 +78,7 @@ public class MockDataGenerateTool implements IExternalTool {
private boolean validateProperties(IWizardPage currentPage) {
if (currentPage instanceof MockDataWizardPageSettings) {
if (!((MockDataWizardPageSettings) currentPage).validateProperties()) {
this.setErrorMessage("All numeric properties should be positive.");
this.setErrorMessage(MockDataMessages.tools_mockdata_wizard_negative_numeric_error);
return true;
}
}
......
......@@ -30,17 +30,55 @@ public class MockDataMessages extends NLS {
public MockDataMessages() {
}
public static String tools_mockdata_generate_data_task;
public static String tools_mockdata_message_title;
public static String tools_mockdata_error_notconnected;
public static String tools_mockdata_error_tableonly;
public static String tools_mockdata_prop_nulls_label;
public static String tools_mockdata_prop_nulls_description;
public static String tools_mockdata_prop_lowercase_label;
public static String tools_mockdata_prop_uppercase_label;
public static String tools_mockdata_generator_boolean_sequence_prop_order_value_constant;
public static String tools_mockdata_generator_boolean_sequence_prop_order_value_alternately;
public static String tools_mockdata_wizard_title;
public static String tools_mockdata_wizard_page_name;
public static String tools_mockdata_wizard_message_process_completed;
public static String tools_mockdata_wizard_page_settings_group_settings;
public static String tools_mockdata_wizard_task_generate_data;
public static String tools_mockdata_wizard_task_insert_data;
public static String tools_mockdata_wizard_page_settings_page_name;
public static String tools_mockdata_wizard_page_settings_page_description;
public static String tools_mockdata_wizard_page_settings_group_settings;
public static String tools_mockdata_wizard_page_settings_checkbox_remove_old_data;
public static String tools_mockdata_wizard_page_settings_confirm_delete_old_data_message;
public static String tools_mockdata_wizard_page_settings_combo_rows;
public static String tools_mockdata_wizard_page_settings_text_entity;
public static String tools_mockdata_wizard_page_settings_group_generators;
public static String tools_mockdata_wizard_page_settings_button_autoassign;
public static String tools_mockdata_wizard_page_settings_button_autoassign_confirm;
public static String tools_mockdata_wizard_page_settings_generatorselector_attribute;
public static String tools_mockdata_wizard_page_settings_generatorselector_generator;
public static String tools_mockdata_wizard_page_settings_button_reset;
public static String tools_mockdata_wizard_page_settings_button_info_notfound;
public static String tools_mockdata_wizard_page_settings_button_info_noattributes;
public static String tools_mockdata_wizard_page_settings_notfound;
public static String tools_mockdata_confirm_delete_old_data_message;
public static String tools_mockdata_wizard_negative_numeric_error;
public static String tools_mockdata_wizard_log_removing_from;
public static String tools_mockdata_wizard_log_removing_error;
public static String tools_mockdata_wizard_log_rows_updated;
public static String tools_mockdata_wizard_log_duration;
public static String tools_mockdata_wizard_log_cleaning;
public static String tools_mockdata_wizard_log_not_removed;
public static String tools_mockdata_wizard_log_inserting_into;
public static String tools_mockdata_wizard_log_inserted_rows;
public static String tools_mockdata_wizard_log_error_inserting;
public static String tools_mockdata_wizard_log_error_generating;
}
tools_mockdata_message_title=Mock Data
tools_mockdata_error_notconnected=Not connected to a database
tools_mockdata_error_tableonly=Mock Data can be generated for a table only
tools_mockdata_prop_nulls_label=% of NULLs
tools_mockdata_prop_nulls_description=NULL values (%)
tools_mockdata_prop_lowercase_label=Lower Case
tools_mockdata_prop_uppercase_label=Upper Case
tools_mockdata_generator_boolean_sequence_prop_order_value_constant=Constant
tools_mockdata_generator_boolean_sequence_prop_order_value_alternately=Alternately
tools_mockdata_wizard_title=Mock Data Wizard
tools_mockdata_wizard_page_name=Mock Data Generator
......@@ -6,5 +17,30 @@ tools_mockdata_wizard_page_settings_group_settings=General
tools_mockdata_wizard_page_settings_page_name=Mock data generator configuration
tools_mockdata_wizard_page_settings_page_description=Set mock data generator settings
tools_mockdata_wizard_page_settings_checkbox_remove_old_data=Remove Old Data
tools_mockdata_generate_data_task=Generate Mock Data
tools_mockdata_confirm_delete_old_data_message=Are you sure you want to delete old data?
tools_mockdata_wizard_page_settings_confirm_delete_old_data_message=Are you sure you want to delete old data?
tools_mockdata_wizard_page_settings_combo_rows=Rows
tools_mockdata_wizard_page_settings_text_entity=Entity
tools_mockdata_wizard_task_generate_data=Generate Mock Data
tools_mockdata_wizard_task_insert_data=Insert data
tools_mockdata_wizard_page_settings_group_generators=Generators
tools_mockdata_wizard_page_settings_button_autoassign=Auto assign generators
tools_mockdata_wizard_page_settings_button_autoassign_confirm=The generators will be assigned automatically. Proceed?
tools_mockdata_wizard_page_settings_generatorselector_attribute=Attribute
tools_mockdata_wizard_page_settings_generatorselector_generator=Generator
tools_mockdata_wizard_page_settings_button_reset=Reset
tools_mockdata_wizard_page_settings_button_info_notfound=Generators for the red highlighted attributes aren't found. So, no data will be generated for them.
tools_mockdata_wizard_page_settings_button_info_noattributes=No attributes in the table
tools_mockdata_wizard_page_settings_notfound=Not found
tools_mockdata_wizard_negative_numeric_error=All numeric properties should be positive.
tools_mockdata_wizard_log_removing_from=Removing old data from the "{0}".\n
tools_mockdata_wizard_log_removing_error= Error removing the data:
tools_mockdata_wizard_log_rows_updated= Rows updated: {0}\n
tools_mockdata_wizard_log_duration= Duration: {0}ms\n\n
tools_mockdata_wizard_log_cleaning=Cleanup old data
tools_mockdata_wizard_log_not_removed=Old data isn't removed.
tools_mockdata_wizard_log_inserting_into=Inserting mock data into the "{0}".\n
tools_mockdata_wizard_log_inserted_rows={0} rows inserted
tools_mockdata_wizard_log_error_inserting= Error inserting mock data: {0}
tools_mockdata_wizard_log_error_generating= Error generating mock data: {0}
......@@ -94,7 +94,7 @@ public class MockDataWizardPageSettings extends ActiveWizardPage<MockDataExecute
};
Composite entityPlaceholder = UIUtils.createPlaceholder(composite, 2);
this.entityNameText = UIUtils.createLabelText(entityPlaceholder, "Entity", "", SWT.NONE | SWT.READ_ONLY);
this.entityNameText = UIUtils.createLabelText(entityPlaceholder, MockDataMessages.tools_mockdata_wizard_page_settings_text_entity, "", SWT.NONE | SWT.READ_ONLY);
GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
gd.widthHint = 230;
gd.verticalIndent = 5;
......@@ -115,7 +115,7 @@ public class MockDataWizardPageSettings extends ActiveWizardPage<MockDataExecute
removeOldDataCheck.addSelectionListener(changeListener);
this.rowsText = UIUtils.createLabelText(
settingsGroup, "Rows ", String.valueOf(mockDataSettings.getRowsNumber()), SWT.BORDER,
settingsGroup, MockDataMessages.tools_mockdata_wizard_page_settings_combo_rows, String.valueOf(mockDataSettings.getRowsNumber()), SWT.BORDER,
new GridData(110, SWT.DEFAULT));
rowsText.addSelectionListener(changeListener);
rowsText.addVerifyListener(UIUtils.getLongVerifyListener(rowsText));
......@@ -128,7 +128,7 @@ public class MockDataWizardPageSettings extends ActiveWizardPage<MockDataExecute
}
{
Group generatorsGroup = UIUtils.createControlGroup(composite, "Generators", 5, GridData.FILL_BOTH, 0);
Group generatorsGroup = UIUtils.createControlGroup(composite, MockDataMessages.tools_mockdata_wizard_page_settings_group_generators, 5, GridData.FILL_BOTH, 0);
GridData gd = new GridData(GridData.FILL_BOTH);
gd.verticalIndent = 5;
generatorsGroup.setLayoutData(gd);
......@@ -139,12 +139,12 @@ public class MockDataWizardPageSettings extends ActiveWizardPage<MockDataExecute
placeholder.setLayoutData(gd);
Button autoAssignButton = new Button(placeholder, SWT.PUSH);
autoAssignButton.setText("Auto assign generators");
autoAssignButton.setText(MockDataMessages.tools_mockdata_wizard_page_settings_button_autoassign);
autoAssignButton.setImage(DBeaverIcons.getImage(UIIcon.OBJ_REFRESH));
autoAssignButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
if (UIUtils.confirmAction(getShell(), MockDataMessages.tools_mockdata_wizard_title, "The generators will be assigned automatically. Proceed?")) {
if (UIUtils.confirmAction(getShell(), MockDataMessages.tools_mockdata_wizard_title, MockDataMessages.tools_mockdata_wizard_page_settings_button_autoassign_confirm)) {
autoAssignGenerators();
}
}
......@@ -207,12 +207,12 @@ public class MockDataWizardPageSettings extends ActiveWizardPage<MockDataExecute
TableViewerColumn attributeColumn = new TableViewerColumn(generatorsTableViewer, SWT.LEFT);
attributeColumn.setLabelProvider(labelProvider);
attributeColumn.getColumn().setText("Attribute");
attributeColumn.getColumn().setText(MockDataMessages.tools_mockdata_wizard_page_settings_generatorselector_attribute);
TableViewerColumn generatorColumn = new TableViewerColumn(generatorsTableViewer, SWT.LEFT);
generatorColumn.setLabelProvider(labelProvider);
TableColumn column = generatorColumn.getColumn();
column.setText("Generator");
column.setText(MockDataMessages.tools_mockdata_wizard_page_settings_generatorselector_generator);
generatorColumn.setEditingSupport(new EditingSupport(generatorsTableViewer) {
@Override
......@@ -317,7 +317,7 @@ public class MockDataWizardPageSettings extends ActiveWizardPage<MockDataExecute
generatorDescriptionLink.setLayoutData(gd);
Button resetButton = new Button(labelCombo, SWT.PUSH);
resetButton.setText("Reset");
resetButton.setText(MockDataMessages.tools_mockdata_wizard_page_settings_button_reset);
resetButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
......@@ -338,7 +338,7 @@ public class MockDataWizardPageSettings extends ActiveWizardPage<MockDataExecute
propsEditor.getControl().setLayoutData(gd);
noGeneratorInfoLabel = UIUtils.createInfoLabel(composite,
"Generators for the red highlighted attributes aren't found. So, no data will be generated for them.");
MockDataMessages.tools_mockdata_wizard_page_settings_button_info_notfound);
//noGeneratorInfoLabel.setForeground(generatorsTableViewer.getDisplay().getSystemColor(SWT.COLOR_RED));
gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
gd.horizontalSpan = 2;
......@@ -437,7 +437,7 @@ public class MockDataWizardPageSettings extends ActiveWizardPage<MockDataExecute
event.type = SWT.Selection;
table.notifyListeners(SWT.Selection, event);
} else {
noGeneratorInfoLabel.setText("No attributes in the table");
noGeneratorInfoLabel.setText(MockDataMessages.tools_mockdata_wizard_page_settings_button_info_noattributes);
noGeneratorInfoLabel.setVisible(true);
}
......@@ -536,8 +536,8 @@ public class MockDataWizardPageSettings extends ActiveWizardPage<MockDataExecute
generatorDescriptionLink.setVisible(true);
}
} else {
generatorCombo.setItems(new String[] {"Not found"});
generatorCombo.setText("Not found");
generatorCombo.setItems(new String[] {MockDataMessages.tools_mockdata_wizard_page_settings_notfound});
generatorCombo.setText(MockDataMessages.tools_mockdata_wizard_page_settings_notfound);
generatorCombo.setEnabled(false);
generatorDescriptionLabel.setText("");
}
......
......@@ -18,6 +18,7 @@
package org.jkiss.dbeaver.ext.mockdata.generator;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.ext.mockdata.MockDataMessages;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSAttributeBase;
import org.jkiss.dbeaver.model.struct.DBSDataManipulator;
......@@ -30,7 +31,28 @@ public class BooleanSequenceGenerator extends AbstractMockValueGenerator {
private boolean value;
private enum ORDER {
ALTERNATELY, CONSTANT
ALTERNATELY (MockDataMessages.tools_mockdata_generator_boolean_sequence_prop_order_value_alternately),
CONSTANT (MockDataMessages.tools_mockdata_generator_boolean_sequence_prop_order_value_constant);
private String label;
ORDER(String label) {
this.label = label;
}
@Override
public String toString() {
return label;
}
public static ORDER find(String label) {
for (ORDER order : values()) {
if (order.label.equalsIgnoreCase(label)) {
return order;
}
}
return null;
}
}
private ORDER order;
......@@ -40,7 +62,7 @@ public class BooleanSequenceGenerator extends AbstractMockValueGenerator {
String o = (String) properties.get("order"); //$NON-NLS-1$
if (o != null) {
this.order = ORDER.valueOf(o);
this.order = ORDER.find(o);
}
Boolean initial = (Boolean) properties.get("initial"); //$NON-NLS-1$
......
......@@ -24,6 +24,7 @@ import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.core.DBeaverUI;
import org.jkiss.dbeaver.ext.mockdata.MockDataGenerateTool;
import org.jkiss.dbeaver.ext.mockdata.MockDataMessages;
import org.jkiss.dbeaver.model.struct.DBSDataContainer;
import org.jkiss.dbeaver.model.struct.DBSDataManipulator;
import org.jkiss.dbeaver.model.struct.DBSObject;
......@@ -49,11 +50,11 @@ public class ResultSetMockDataHandler extends AbstractHandler {
if (resultSet != null) {
DBSDataContainer dataContainer = resultSet.getDataContainer();
if (dataContainer == null || dataContainer.getDataSource() == null) {
DBeaverUI.getInstance().showError("Mock Data", "Not connected to a database");
DBeaverUI.getInstance().showError(MockDataMessages.tools_mockdata_message_title, MockDataMessages.tools_mockdata_error_notconnected);
return null;
}
if (!(dataContainer instanceof DBSDataManipulator)) {
DBeaverUI.getInstance().showError("Mock Data", "Mock Data can be generated for a table only");
DBeaverUI.getInstance().showError(MockDataMessages.tools_mockdata_message_title, MockDataMessages.tools_mockdata_error_tableonly);
return null;
}
selectedObjects = new ArrayList<>();
......
......@@ -19,6 +19,7 @@ package org.jkiss.dbeaver.ext.mockdata.model;
import org.eclipse.core.runtime.IConfigurationElement;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.ext.mockdata.MockDataMessages;
import org.jkiss.dbeaver.model.DBPDataKind;
import org.jkiss.dbeaver.model.DBPImage;
import org.jkiss.dbeaver.model.impl.PropertyDescriptor;
......@@ -43,6 +44,7 @@ public class MockGeneratorDescriptor extends DataTypeAbstractDescriptor<MockValu
public static final String DATETIME_RANDOM_GENERATOR_ID = "dateRandomGenerator"; //NON-NLS-1
public static final String NUMERIC_RANDOM_GENERATOR_ID = "numericRandomGenerator"; //NON-NLS-1
public static final String STRING_TEXT_GENERATOR_ID = "stringTextGenerator"; //NON-NLS-1
public static final String ZERO_GENERATOR_ID = "zeroGenerator"; //NON-NLS-1
public static final String TAG_PRESET = "preset"; //NON-NLS-1
......@@ -65,32 +67,34 @@ public class MockGeneratorDescriptor extends DataTypeAbstractDescriptor<MockValu
this.url = config.getAttribute(RegistryConstants.ATTR_URL);
this.icon = iconToImage(config.getAttribute(RegistryConstants.ATTR_ICON));
properties.add(new PropertyDescriptor(
"General", "nulls", "% of NULLs", "NULL values (%)", false,
PropertyDescriptor.PropertyType.t_integer.getValueType(), 0, null));
if (!ZERO_GENERATOR_ID.equals(this.getId())) {
properties.add(new PropertyDescriptor(
"General", "nulls", MockDataMessages.tools_mockdata_prop_nulls_label, MockDataMessages.tools_mockdata_prop_nulls_description, false,
PropertyDescriptor.PropertyType.t_integer.getValueType(), 0, null));
for (IConfigurationElement prop : config.getChildren(PropertyDescriptor.TAG_PROPERTY_GROUP)) {
properties.addAll(PropertyDescriptor.extractProperties(prop));
}
for (IConfigurationElement prop : config.getChildren(PropertyDescriptor.TAG_PROPERTY_GROUP)) {
properties.addAll(PropertyDescriptor.extractProperties(prop));
}
for (IConfigurationElement preset : config.getChildren(TAG_PRESET)) {
presets.add(new Preset(
preset.getAttribute("id"),
preset.getAttribute("label"),
preset.getAttribute("mnemonics"),
preset.getAttribute("description"),
PropertyDescriptor.extractProperties(preset),
extractTags(preset)
));
}
for (IConfigurationElement preset : config.getChildren(TAG_PRESET)) {
presets.add(new Preset(
preset.getAttribute("id"),
preset.getAttribute("label"),
preset.getAttribute("mnemonics"),
preset.getAttribute("description"),
PropertyDescriptor.extractProperties(preset),
extractTags(preset)
));
}
if (getSupportedTypes().contains(DBPDataKind.STRING)) {
properties.add(new PropertyDescriptor(
"General", "lowercase", "Lower Case", null, false,
PropertyDescriptor.PropertyType.t_boolean.getValueType(), false, null));
properties.add(new PropertyDescriptor(
"General", "uppercase", "Upper Case", null, false,
PropertyDescriptor.PropertyType.t_boolean.getValueType(), false, null));
if (getSupportedTypes().contains(DBPDataKind.STRING)) {
properties.add(new PropertyDescriptor(
"General", "lowercase", MockDataMessages.tools_mockdata_prop_lowercase_label, null, false,
PropertyDescriptor.PropertyType.t_boolean.getValueType(), false, null));
properties.add(new PropertyDescriptor(
"General", "uppercase", MockDataMessages.tools_mockdata_prop_uppercase_label, null, false,
PropertyDescriptor.PropertyType.t_boolean.getValueType(), false, null));
}
}
List<String> tags = extractTags(config);
......
......@@ -310,6 +310,8 @@ meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.maxVa
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.maxValue.description=Maximum value of the sequence
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.minValue.name=Min Value
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.minValue.description=Minimum value of the sequence
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.cacheValue.name=Cache
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.cacheValue.description=Cache of the sequence
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.cycled.name=Cycled
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence$AdditionalInfo.cycled.description= Whether the sequence cycles
meta.org.jkiss.dbeaver.ext.postgresql.model.PostgreTable.hasOids.name=Has Oids
......
......@@ -103,7 +103,7 @@
</folder>
</items>
</folder>
<folder type="org.jkiss.dbeaver.ext.postgresql.model.PostgreMaterializedView" label="%tree.mviews.node.name" icon="#folder_view" description="Materizlized views">
<folder type="org.jkiss.dbeaver.ext.postgresql.model.PostgreMaterializedView" label="%tree.mviews.node.name" icon="#folder_view" description="Materialized views">
<items label="%tree.mview.node.name" path="view" property="materializedViews" icon="#view">
<folder type="org.jkiss.dbeaver.ext.postgresql.model.PostgreAttribute" label="%tree.columns.node.name" icon="#columns" description="View columns">
<items label="%tree.column.node.name" path="attribute" property="attributes" icon="#column">
......
......@@ -455,8 +455,31 @@ public class PostgreUtils {
driver.getDriverParameter(PostgreConstants.PROP_GREENPLUM_DRIVER));
}
public static List<PostgrePermission> extractPermissionsFromACL(@NotNull PostgrePermissionsOwner owner, @Nullable Object acl) {
public static List<PostgrePermission> extractPermissionsFromACL(DBRProgressMonitor monitor, @NotNull PostgrePermissionsOwner owner, @Nullable Object acl) throws DBException {
if (!(acl instanceof java.sql.Array)) {
if (acl == null) {
// Special case. Means ALL permissions are granted to table owner
PostgreRole objectOwner = owner.getOwner(monitor);
String granteeName = objectOwner == null ? null : objectOwner.getName();
List<PostgrePrivilege> privileges = new ArrayList<>();
for (PostgrePrivilegeType pt : PostgrePrivilegeType.values()) {
if (pt.supportsType(owner.getClass())) {
privileges.add(
new PostgrePrivilege(
granteeName,
granteeName,
owner.getDatabase().getName(),
owner.getSchema().getName(),
owner.getName(),
pt,
false,
false));
}
}
PostgreObjectPermission permission = new PostgreObjectPermission(owner, objectOwner == null ? null : objectOwner.getName(), privileges);
return Collections.singletonList(permission);
}
return Collections.emptyList();
}
Object itemArray;
......
......@@ -132,10 +132,15 @@ public class PostgreDataType extends JDBCDataType<PostgreSchema> implements Post
}
}
this.dataKind = JDBCDataSource.getDataKind(getName(), valueType);
if (this.dataKind == DBPDataKind.OBJECT) {
if (PostgreConstants.TYPE_JSONB.equals(name) || PostgreConstants.TYPE_JSON.equals(name)) {
this.dataKind = DBPDataKind.CONTENT;
if (typeType == PostgreTypeType.e) {
// Enums are strings
this.dataKind = DBPDataKind.STRING;
} else {
this.dataKind = JDBCDataSource.getDataKind(getName(), valueType);
if (this.dataKind == DBPDataKind.OBJECT) {
if (PostgreConstants.TYPE_JSONB.equals(name) || PostgreConstants.TYPE_JSON.equals(name)) {
this.dataKind = DBPDataKind.CONTENT;
}
}
}
......@@ -449,7 +454,7 @@ public class PostgreDataType extends JDBCDataType<PostgreSchema> implements Post
@Override
public DBCLogicalOperator[] getSupportedOperators(DBSTypedObject attribute) {
if (dataKind == DBPDataKind.STRING) {
if (typeCategory == PostgreTypeCategory.S) {
if (typeCategory == PostgreTypeCategory.S || typeCategory == PostgreTypeCategory.E) {
return new DBCLogicalOperator[]{
DBCLogicalOperator.IS_NULL,
DBCLogicalOperator.IS_NOT_NULL,
......
......@@ -27,15 +27,15 @@ public enum PostgrePrivilegeType {
INSERT('a', true, PostgreTableReal.class, PostgreTableColumn.class),
UPDATE('w', true, PostgreTableBase.class, PostgreTableColumn.class),
DELETE('d', true, PostgreTableReal.class, PostgreTableColumn.class),
TRUNCATE('t', true, PostgreTableReal.class),
TRUNCATE('D', true, PostgreTableReal.class),
REFERENCES('x', true, PostgreTableReal.class, PostgreTableColumn.class),
TRIGGER('D', true, PostgreTableReal.class),
TRIGGER('t', true, PostgreTableReal.class),
// SEQUENCE privs
USAGE('U', true, PostgreSequence.class),
EXECUTE('X', true, PostgreProcedure.class),
UNKNOWN((char)0, false, Object.class);
UNKNOWN((char)0, false);
private final Class<?>[] targetType;
private final char code;
......
......@@ -454,7 +454,7 @@ public class PostgreProcedure extends AbstractProcedure<PostgreDataSource, Postg
@Override
public Collection<PostgrePermission> getPermissions(DBRProgressMonitor monitor, boolean includeNestedObjects) throws DBException {
return PostgreUtils.extractPermissionsFromACL(this, acl);
return PostgreUtils.extractPermissionsFromACL(monitor,this, acl);
}
@Override
......
......@@ -58,6 +58,7 @@ public class PostgreSequence extends PostgreTableBase implements DBSSequence, DB
private Number minValue;
private Number maxValue;
private Number incrementBy;
private Number cacheValue;
private boolean isCycled;
@Property(viewable = true, editable = true, updatable = false, order = 10)
......@@ -77,6 +78,10 @@ public class PostgreSequence extends PostgreTableBase implements DBSSequence, DB
return incrementBy;
}
@Property(viewable = true, editable = true, updatable = false, order = 14)
public Number getCacheValue() {
return cacheValue;
}
@Property(viewable = true, editable = true, updatable = false, order = 15)
public boolean isCycled() {
return isCycled;
}
......@@ -124,6 +129,7 @@ public class PostgreSequence extends PostgreTableBase implements DBSSequence, DB
additionalInfo.minValue = JDBCUtils.safeGetLong(seqResults, "min_value");
additionalInfo.maxValue = JDBCUtils.safeGetLong(seqResults, "max_value");
additionalInfo.incrementBy = JDBCUtils.safeGetLong(seqResults, "increment_by");
additionalInfo.cacheValue = JDBCUtils.safeGetLong(seqResults, "cache_size");
additionalInfo.isCycled = JDBCUtils.safeGetBoolean(seqResults, "cycle");
}
}
......@@ -137,6 +143,7 @@ public class PostgreSequence extends PostgreTableBase implements DBSSequence, DB
additionalInfo.minValue = JDBCUtils.safeGetLong(seqResults, "min_value");
additionalInfo.maxValue = JDBCUtils.safeGetLong(seqResults, "max_value");
additionalInfo.incrementBy = JDBCUtils.safeGetLong(seqResults, "increment_by");
additionalInfo.cacheValue = JDBCUtils.safeGetLong(seqResults, "cache_size");
additionalInfo.isCycled = JDBCUtils.safeGetBoolean(seqResults, "is_cycled");
}
}
......@@ -214,6 +221,9 @@ public class PostgreSequence extends PostgreTableBase implements DBSSequence, DB
if (info.getLastValue() != null && info.getLastValue().longValue() > 0) {
sql.append("\n\tSTART ").append(info.getLastValue());
}
sql.append("\n\tCACHE ").append(info.getCacheValue())
.append("\n\t").append(info.isCycled ? "" : "NO ").append("CYCLE")
.append(";");
if (!CommonUtils.isEmpty(getDescription())) {
sql.append("\nCOMMENT ON SEQUENCE ").append(DBUtils.getQuotedIdentifier(this)).append(" IS ")
......
......@@ -193,7 +193,7 @@ public abstract class PostgreTableBase extends JDBCTable<PostgreDataSource, Post
@Override
public Collection<PostgrePermission> getPermissions(DBRProgressMonitor monitor, boolean includeNestedObjects) throws DBException {
List<PostgrePermission> tablePermissions = PostgreUtils.extractPermissionsFromACL(this, acl);
List<PostgrePermission> tablePermissions = PostgreUtils.extractPermissionsFromACL(monitor, this, acl);
if (!includeNestedObjects) {
return tablePermissions;
}
......
......@@ -48,7 +48,7 @@ public class PostgreTableColumn extends PostgreAttribute<PostgreTableBase> imple
@Override
public Collection<PostgrePermission> getPermissions(DBRProgressMonitor monitor, boolean includeNestedObjects) throws DBException {
return PostgreUtils.extractPermissionsFromACL(this, getAcl());
return PostgreUtils.extractPermissionsFromACL(monitor, this, getAcl());
}
}
......@@ -275,7 +275,7 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor<P
}
// Add to map
permissionMap.put(permission.getName(), permission);
} else {
} else if (privilegeType != null) {
// Check for privilege was already granted for this object
boolean hasPriv = permission.getPermission(privilegeType) != PostgrePermission.NONE;
if (grant == hasPriv) {
......
......@@ -105,6 +105,10 @@ public class JDBCConnectionImpl extends AbstractSession implements JDBCSession,
scrollable ? ResultSet.TYPE_SCROLL_INSENSITIVE : ResultSet.TYPE_FORWARD_ONLY,
updatable ? ResultSet.CONCUR_UPDATABLE : ResultSet.CONCUR_READ_ONLY);
}
catch (SQLSyntaxErrorException e) {
// Call syntax not supported. Let's try t execute it as a regular query
return prepareStatement(DBCStatementType.QUERY, sqlQuery, scrollable, updatable, returnGeneratedKeys);
}
catch (SQLFeatureNotSupportedException | UnsupportedOperationException | IncompatibleClassChangeError e) {
return prepareCall(sqlQuery);
}
......@@ -145,7 +149,7 @@ public class JDBCConnectionImpl extends AbstractSession implements JDBCSession,
}
}
if (statement instanceof JDBCStatementImpl) {
((JDBCStatementImpl)statement).setQueryString(sqlQuery);
statement.setQueryString(sqlQuery);
}
return statement;
} else if (returnGeneratedKeys) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册