未验证 提交 03d14229 编写于 作者: S Serge Rider 提交者: GitHub

Merge pull request #2980 from dbeaver/#1599-mock-data_11

#1599 Mock Data. Percent of generated NULL values can be specified. Some NPEs are fixed.
......@@ -45,7 +45,7 @@
<property id="minLength" label="Min Length" type="integer" defaultValue="1" description="Minimum length"/>
<property id="maxLength" label="Max Length" type="integer" description="Maximum length (0 means the column length)"/>
<property id="nulls" label="NULLs" type="boolean" defaultValue="TRUE" description="Allow NULL values"/>
<property id="nulls" label="NULLs" type="integer" defaultValue="10" description="NULL values (%)"/>
</propertyGroup>
</generator>
......@@ -57,7 +57,7 @@
<type kind="STRING"/>
<propertyGroup label="General">
<property id="nulls" label="NULL values" type="boolean" defaultValue="TRUE" description="Allow NULL values"/>
<property id="nulls" label="NULLs" type="integer" defaultValue="10" description="NULL values (%)"/>
</propertyGroup>
</generator>
......@@ -69,7 +69,7 @@
<type kind="NUMERIC"/>
<propertyGroup label="General">
<property id="nulls" label="NULLs" type="boolean" defaultValue="TRUE" description="Allow NULL values"/>
<property id="nulls" label="NULLs" type="integer" defaultValue="10" description="NULL values (%)"/>
</propertyGroup>
</generator>
......@@ -85,7 +85,7 @@
<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="nulls" label="NULLs" type="boolean" defaultValue="TRUE" description="Allow NULL values"/>
<property id="nulls" label="NULLs" type="integer" defaultValue="10" description="NULL values (%)"/>
</propertyGroup>
</generator>
......@@ -100,7 +100,7 @@
<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="nulls" label="NULLs" type="boolean" defaultValue="TRUE"/>
<property id="nulls" label="NULLs" type="integer" defaultValue="10" description="NULL values (%)"/>
</propertyGroup>
</generator>
......@@ -116,7 +116,7 @@
<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="nulls" label="NULLs" type="boolean" defaultValue="TRUE"/>
<property id="nulls" label="NULLs" type="integer" defaultValue="10" description="NULL values (%)"/>
</propertyGroup>
</generator>
......@@ -128,7 +128,7 @@
<type kind="BOOLEAN"/>
<propertyGroup label="General">
<property id="nulls" label="NULLs" type="boolean" defaultValue="TRUE" description="Allow NULL values"/>
<property id="nulls" label="NULLs" type="integer" defaultValue="10" description="NULL values (%)"/>
</propertyGroup>
</generator>
......@@ -142,7 +142,8 @@
<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="nulls" label="NULLs" type="boolean" defaultValue="TRUE" description="Allow NULL values"/>
<property id="nulls" label="NULLs" type="integer" defaultValue="10" description="NULL values (%)"/>
</propertyGroup>
</generator>
......
......@@ -166,10 +166,16 @@ public class MockDataSettings {
PropertySourceCustom generatorPropertySource = attrGeneratorProperties.getGeneratorPropertySource(selectedGeneratorId);
IDialogSettings generatorSection = UIUtils.getSettingsSection(attributeSection, KEY_GENERATOR_SECTION);
Map<Object, Object> properties = generatorPropertySource.getPropertiesWithDefaults();
for (Map.Entry<Object, Object> propEntry : properties.entrySet()) {
Object savedValue = UIUtils.getSectionValueWithType(generatorSection, (String) propEntry.getKey());
generatorPropertySource.setPropertyValue(voidProgressMonitor, propEntry.getKey(), savedValue);
if (generatorPropertySource != null) {
Map<Object, Object> properties = generatorPropertySource.getPropertiesWithDefaults();
for (Map.Entry<Object, Object> propEntry : properties.entrySet()) {
String key = (String) propEntry.getKey();
Object savedValue = UIUtils.getSectionValueWithType(generatorSection, key);
if (key.equals("nulls") && savedValue instanceof Boolean) {
continue; // skip incorrect type TODO can be removed in the future
}
generatorPropertySource.setPropertyValue(voidProgressMonitor, propEntry.getKey(), savedValue);
}
}
}
}
......@@ -191,9 +197,11 @@ public class MockDataSettings {
IDialogSettings generatorSection = UIUtils.getSettingsSection(attributeSection, KEY_GENERATOR_SECTION);
PropertySourceCustom generatorPropertySource = attrGeneratorProperties.getGeneratorPropertySource(selectedGeneratorId);
Map<Object, Object> properties = generatorPropertySource.getPropertiesWithDefaults();
for (Map.Entry<Object, Object> propEntry : properties.entrySet()) {
UIUtils.putSectionValueWithType(generatorSection, (String) propEntry.getKey(), propEntry.getValue());
if (generatorPropertySource != null) {
Map<Object, Object> properties = generatorPropertySource.getPropertiesWithDefaults();
for (Map.Entry<Object, Object> propEntry : properties.entrySet()) {
UIUtils.putSectionValueWithType(generatorSection, (String) propEntry.getKey(), propEntry.getValue());
}
}
}
}
......
......@@ -35,6 +35,7 @@ import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.CustomComboBoxCellEditor;
import org.jkiss.dbeaver.ui.dialogs.ActiveWizardPage;
import org.jkiss.dbeaver.ui.properties.PropertyTreeViewer;
import org.jkiss.utils.CommonUtils;
import java.util.*;
import java.util.List;
......@@ -335,7 +336,7 @@ public class MockDataWizardPageSettings extends ActiveWizardPage<MockDataExecute
for (String attr : attributeGenerators.keySet()) {
AttributeGeneratorProperties attributeGeneratorProperties = attributeGenerators.get(attr);
String selectedGeneratorId = attributeGeneratorProperties.getSelectedGeneratorId();
if (selectedGeneratorId != null) {
if (!CommonUtils.isEmpty(selectedGeneratorId)) {
Map<Object, Object> properties =
attributeGeneratorProperties.getGeneratorPropertySource(selectedGeneratorId).getPropertiesWithDefaults();
for (Object key : properties.keySet()) {
......
......@@ -25,7 +25,7 @@ public abstract class AbstractMockValueGenerator implements MockValueGenerator {
protected DBSAttributeBase attribute;
protected static Random random = new Random();
protected boolean allowNulls;
protected int nullsPersent = 10;
private boolean isFirstRun = true;
private boolean isUnique;
private Set uniqueValues;
......@@ -42,7 +42,19 @@ public abstract class AbstractMockValueGenerator implements MockValueGenerator {
this.dbsEntity = (DBSEntity) container;
this.attribute = attribute;
allowNulls = !attribute.isRequired() && Boolean.valueOf(CommonUtils.toString(properties.get("nulls")));
if (attribute.isRequired()) {
nullsPersent = 0;
} else {
if (properties.get("nulls") != null) {
nullsPersent = (int) properties.get("nulls");
}
}
if (nullsPersent > 100) {
nullsPersent = 100;
} else
if (nullsPersent < 0) {
nullsPersent = 0;
}
}
@Override
......@@ -82,7 +94,7 @@ public abstract class AbstractMockValueGenerator implements MockValueGenerator {
protected abstract Object generateOneValue(DBRProgressMonitor monitor) throws DBException;
protected boolean isGenerateNULL() {
if (allowNulls && (random.nextInt() % 10 == 1)) { // TODO every 10th is NULL - should be customized
if ((nullsPersent > 0) && ((nullsPersent == 100) || (random.nextInt(100) <= nullsPersent))) {
return true;
}
else {
......
......@@ -38,7 +38,7 @@ public class FKGenerator extends AbstractMockValueGenerator {
public void init(DBSDataManipulator container, DBSAttributeBase attribute, Map<Object, Object> properties) throws DBException {
super.init(container, attribute, properties);
allowNulls = false;
nullsPersent = 0;
Integer numberRefRecords = (Integer) properties.get("numberRefRecords"); //$NON-NLS-1$
if (numberRefRecords != null) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册