diff --git a/plugins/org.jkiss.dbeaver.ext.mockdata/plugin.xml b/plugins/org.jkiss.dbeaver.ext.mockdata/plugin.xml index 70ad0778ddb110a6bc70906767a76a779e62248f..1204dd6cd6b6c76e5c7253f2274cfecee655d82f 100644 --- a/plugins/org.jkiss.dbeaver.ext.mockdata/plugin.xml +++ b/plugins/org.jkiss.dbeaver.ext.mockdata/plugin.xml @@ -43,7 +43,7 @@ - + diff --git a/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataExecuteWizard.java b/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataExecuteWizard.java index 55c4dec352210ec744d6ccc348a8f59adbe5623e..79f0c4f37230fc9bc991aace1eb9ef16d00a0544 100644 --- a/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataExecuteWizard.java +++ b/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataExecuteWizard.java @@ -174,7 +174,7 @@ public class MockDataExecuteWizard extends AbstractToolWizard generatorDescriptors = new HashMap<>(); // generatorId -> MockGeneratorDescriptor private Map attributeGenerators = new HashMap<>(); // attribute.name -> generators properties @@ -105,6 +108,14 @@ public class MockDataSettings { return attributes; } + public String getSelectedAttribute() { + return selectedAttribute; + } + + public void setSelectedAttribute(String selectedAttribute) { + this.selectedAttribute = selectedAttribute; + } + private void putGenerator(AttributeGeneratorProperties generatorProperties, MockGeneratorDescriptor generator) { generatorDescriptors.put(generator.getId(), generator); generatorProperties.putGeneratorPropertySource(generator.getId(), new PropertySourceCustom(generator.getProperties(), null)); @@ -158,6 +169,7 @@ public class MockDataSettings { } // load selected generators + selectedAttribute = dialogSettings.get(KEY_SELECTED_ATTRIBUTE); VoidProgressMonitor voidProgressMonitor = new VoidProgressMonitor(); IDialogSettings tableSection = UIUtils.getSettingsSection(dialogSettings, dbsEntity.getName()); for (Map.Entry entry : attributeGenerators.entrySet()) { @@ -167,6 +179,7 @@ public class MockDataSettings { if (selectedGeneratorId != null) { AttributeGeneratorProperties attrGeneratorProperties = entry.getValue(); attrGeneratorProperties.setSelectedGeneratorId(selectedGeneratorId); + attrGeneratorProperties.setPresetId(attributeSection.get(KEY_PRESET_ID)); PropertySourceCustom generatorPropertySource = attrGeneratorProperties.getGeneratorPropertySource(selectedGeneratorId); IDialogSettings generatorSection = UIUtils.getSettingsSection(attributeSection, KEY_GENERATOR_SECTION); @@ -190,6 +203,7 @@ public class MockDataSettings { dialogSettings.put(PROP_ROWS_NUMBER, rowsNumber); // save selected generators + dialogSettings.put(KEY_SELECTED_ATTRIBUTE, selectedAttribute); IDialogSettings tableSection = UIUtils.getSettingsSection(dialogSettings, dbsEntity.getName()); for (Map.Entry attrEntry : attributeGenerators.entrySet()) { String attributeName = attrEntry.getKey(); @@ -198,6 +212,7 @@ public class MockDataSettings { IDialogSettings attributeSection = UIUtils.getSettingsSection(tableSection, attributeName); String selectedGeneratorId = attrGeneratorProperties.getSelectedGeneratorId(); attributeSection.put(KEY_SELECTED_GENERATOR, selectedGeneratorId); + attributeSection.put(KEY_PRESET_ID, attrGeneratorProperties.getPresetId()); IDialogSettings generatorSection = UIUtils.getSettingsSection(attributeSection, KEY_GENERATOR_SECTION); PropertySourceCustom generatorPropertySource = attrGeneratorProperties.getGeneratorPropertySource(selectedGeneratorId); @@ -212,12 +227,17 @@ public class MockDataSettings { public class AttributeGeneratorProperties { private final DBSAttributeBase attribute; - private String selectedGeneratorId = null; // id + private String selectedGeneratorId = null; + private String presetId = null; private Map generators = new HashMap<>(); // generatorId -> PropertySourceCustom + public AttributeGeneratorProperties(DBSAttributeBase attribute) { this.attribute = attribute; } - public DBSAttributeBase getAttribute() { return attribute; } + + public DBSAttributeBase getAttribute() { + return attribute; + } public String getSelectedGeneratorId() { if (selectedGeneratorId == null && !CommonUtils.isEmpty(getGenerators())) { @@ -234,7 +254,10 @@ public class MockDataSettings { if ((selectedGeneratorId == null || !generatorDescriptors.keySet().contains(selectedGeneratorId)) && !CommonUtils.isEmpty(getGenerators())) { selectedGeneratorId = getGenerators().iterator().next(); } - this.selectedGeneratorId = selectedGeneratorId; + if (this.selectedGeneratorId != selectedGeneratorId) { + this.selectedGeneratorId = selectedGeneratorId; + presetId = null; + } return selectedGeneratorId; } @@ -249,6 +272,14 @@ public class MockDataSettings { return generators.get(generatorId); } + public String getPresetId() { + return presetId; + } + + public void setPresetId(String presetId) { + this.presetId = presetId; + } + public boolean isEmpty() { return generators.isEmpty(); } diff --git a/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataWizardPageSettings.java b/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataWizardPageSettings.java index bc5341dc6e514991e61ab3a108fa6e549a607ad2..e68061764aa3d20243d13c5ea6ef5cc4f6ecb6f6 100644 --- a/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataWizardPageSettings.java +++ b/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataWizardPageSettings.java @@ -31,6 +31,8 @@ import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.ext.mockdata.MockDataSettings.AttributeGeneratorProperties; import org.jkiss.dbeaver.ext.mockdata.model.MockGeneratorDescriptor; import org.jkiss.dbeaver.model.DBValueFormatting; +import org.jkiss.dbeaver.model.preferences.DBPPropertyDescriptor; +import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor; import org.jkiss.dbeaver.model.struct.DBSAttributeBase; import org.jkiss.dbeaver.runtime.properties.PropertySourceCustom; import org.jkiss.dbeaver.ui.DBeaverIcons; @@ -60,6 +62,7 @@ public class MockDataWizardPageSettings extends ActiveWizardPage presets = mockDataSettings.getGeneratorDescriptor(selectedGeneratorId).getPresets(); + for (MockGeneratorDescriptor.Preset preset : presets) { + if (presetId.equals(preset.getId())) { + label += " [" + preset.getMnemonics() + "]"; + break; + } + } + } + cell.setText(label); } } } @@ -224,7 +238,7 @@ public class MockDataWizardPageSettings extends ActiveWizardPage 0) { + presetCombo.select(0); + } + columnsTableViewer.refresh(true, true); } }); gd = new GridData(); @@ -319,6 +351,29 @@ public class MockDataWizardPageSettings extends ActiveWizardPage presets = mockDataSettings.getGeneratorDescriptor(generatorId).getPresets(); + for (MockGeneratorDescriptor.Preset preset : presets) { + + // Apply the preset + if (preset.getLabel().equals(presetName)) { + propertySource = attributeGeneratorProperties.getGeneratorPropertySource(generatorId); + VoidProgressMonitor monitor = new VoidProgressMonitor(); + for (DBPPropertyDescriptor prop : preset.getProperties()) { + propertySource.setPropertyValue(monitor, prop.getId(), prop.getDefaultValue()); + } + propsEditor.loadProperties(propertySource); + propsEditor.setExpandMode(PropertyTreeViewer.ExpandMode.FIRST); + propsEditor.expandAll(); + + attributeGeneratorProperties.setPresetId(preset.getId()); + columnsTableViewer.refresh(true, true); + } + } + } + @Override public void activatePage() { @@ -335,15 +390,24 @@ public class MockDataWizardPageSettings extends ActiveWizardPage 0) { - table.select(0); + int selectedItem = 0; + String selectedAttribute = mockDataSettings.getSelectedAttribute(); + if (selectedAttribute != null) { + for (int i = 0; i < table.getItemCount(); i++) { + if (selectedAttribute.equals(table.getItem(i).getText())) { + selectedItem = i; break; + } + } + } + table.select(selectedItem); // and notify the listeners Event event = new Event(); event.widget = table; event.display = table.getDisplay(); - event.item = table.getItem(0); + event.item = table.getItem(selectedItem); event.type = SWT.Selection; table.notifyListeners(SWT.Selection, event); } else { @@ -408,7 +472,10 @@ public class MockDataWizardPageSettings extends ActiveWizardPage generators = new ArrayList<>(); for (String genId : attributeGeneratorProperties.getGenerators()) { generators.add(mockDataSettings.getGeneratorDescriptor(genId).getLabel()); @@ -435,6 +504,23 @@ public class MockDataWizardPageSettings extends ActiveWizardPage presets = generatorDescriptor.getPresets(); + if (!presets.isEmpty()) { + presetCombo.removeAll(); + presetCombo.add("Select preset..."); + int presetIndex = 0, i = 1; + String presetId = attributeGeneratorProperties.getPresetId(); + for (MockGeneratorDescriptor.Preset preset : presets) { + presetCombo.add(preset.getLabel()); + if (presetId != null && preset.getId().equals(presetId)) { + presetIndex = i; + } + i++; + } + presetCombo.select(presetIndex); + presetCombo.setVisible(true); + } } else { generatorCombo.setItems(new String[] {"Not found"}); generatorCombo.setText("Not found"); diff --git a/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/generator/StringTextGenerator.java b/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/generator/StringTextGenerator.java index 6d32eb61bb892997609f2192abc3fcbd1f53ab1d..dbdde1029d5f0c6fb2b8199268a361a1e437fc79 100644 --- a/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/generator/StringTextGenerator.java +++ b/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/generator/StringTextGenerator.java @@ -34,7 +34,7 @@ public class StringTextGenerator extends AbstractMockValueGenerator { private String templateString; private int minLength = 1; - private int maxLength = 0; + private int maxLength = 100; @Override public void init(DBSDataManipulator container, DBSAttributeBase attribute, Map properties) throws DBException { @@ -55,10 +55,10 @@ public class StringTextGenerator extends AbstractMockValueGenerator { this.maxLength = max; } - if (maxLength == 0 || maxLength > attribute.getMaxLength()) { + if (maxLength == 0 || (attribute.getMaxLength() > 0 && maxLength > attribute.getMaxLength())) { maxLength = (int) attribute.getMaxLength(); } - if (maxLength > templateString.length()) { + if (maxLength > templateString.length()) { // TODO check templateString shouldn't be empty maxLength = templateString.length(); } } diff --git a/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/model/MockGeneratorDescriptor.java b/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/model/MockGeneratorDescriptor.java index 6aa0db51c0f017d18ed8d973a158aa57db4983fd..d4cb58a11af65acf8f56d201847dc199cad17d58 100644 --- a/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/model/MockGeneratorDescriptor.java +++ b/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/model/MockGeneratorDescriptor.java @@ -35,12 +35,15 @@ public class MockGeneratorDescriptor extends DataTypeAbstractDescriptor properties = new ArrayList<>(); + private List presets = new ArrayList<>(); public MockGeneratorDescriptor(IConfigurationElement config) { @@ -54,6 +57,15 @@ public class MockGeneratorDescriptor extends DataTypeAbstractDescriptor getPresets() { + return presets; + } + + public static class Preset { + private final String id; + private final String label; + private final String mnemonics; + private final List properties; + + public Preset(String id, String label, String mnemonics, List properties) { + this.id = id; + this.label = label; + this.mnemonics = mnemonics; + this.properties = properties; + } + + public String getId() { + return id; + } + + public String getLabel() { + return label; + } + + public String getMnemonics() { + return mnemonics; + } + + public List getProperties() { + return properties; + } + } }