package org.insightech.er.editor.model.testdata; import java.util.HashMap; import java.util.Map; import org.insightech.er.db.sqltype.SqlType; import org.insightech.er.editor.model.diagram_contents.element.node.table.column.NormalColumn; public class RepeatTestData implements Cloneable { private int testDataNum; private Map<NormalColumn, RepeatTestDataDef> dataDefMap; public RepeatTestData() { this.dataDefMap = new HashMap<NormalColumn, RepeatTestDataDef>(); } public RepeatTestDataDef getDataDef(NormalColumn normalColumn) { RepeatTestDataDef dataDef = this.dataDefMap.get(normalColumn); if (dataDef == null) { dataDef = this.createDataDef(normalColumn); this.dataDefMap.put(normalColumn, dataDef); } return dataDef; } public RepeatTestDataDef setDataDef(NormalColumn normalColumn, RepeatTestDataDef dataDef) { return this.dataDefMap.put(normalColumn, dataDef); } public int getTestDataNum() { return testDataNum; } public void setTestDataNum(int testDataNum) { this.testDataNum = testDataNum; } @Override public RepeatTestData clone() { RepeatTestData clone = new RepeatTestData(); clone.testDataNum = this.testDataNum; for (Map.Entry<NormalColumn, RepeatTestDataDef> entry : dataDefMap .entrySet()) { RepeatTestDataDef cloneTemplateTestDataDef = entry.getValue() .clone(); clone.dataDefMap.put(entry.getKey(), cloneTemplateTestDataDef); } return clone; } private RepeatTestDataDef createDataDef(NormalColumn normalColumn) { RepeatTestDataDef dataDef = new RepeatTestDataDef(); SqlType sqlType = normalColumn.getType(); Integer length = normalColumn.getTypeData().getLength(); dataDef.setFrom(1); dataDef.setIncrement(1); dataDef.setRepeatNum(1); if (length != null) { if (length == 1) { dataDef.setTo(9); } else if (length == 2) { dataDef.setTo(99); } else { dataDef.setTo(100); } } else { dataDef.setTo(100); } if (normalColumn.isForeignKey()) { dataDef.setType(RepeatTestDataDef.TYPE_FOREIGNKEY); } else { dataDef.setType(RepeatTestDataDef.TYPE_FORMAT); } String template = null; String[] selects = null; if (sqlType == null) { String prefix = normalColumn.getName() + "_"; template = prefix + "%"; selects = new String[] { prefix + "1", prefix + "2", prefix + "3", prefix + "4" }; } else if (sqlType.isNumber()) { template = "%"; selects = new String[] { "1", "2", "3", "4" }; } else if (sqlType.isTimestamp()) { template = "2000-01-% 12:00:00.000"; selects = new String[] { "2000-01-01 12:00:00.000", "2000-01-02 12:00:00.000", "2000-01-03 12:00:00.000", "2000-01-04 12:00:00.000" }; } else { String prefix = normalColumn.getName(); if (length != null) { if (length < 4) { prefix = ""; } else { if (prefix.length() > length - 3) { prefix = prefix.substring(0, length - 3) + "_"; } else { prefix = prefix + "_"; } } } template = prefix + "%"; selects = new String[] { prefix + "1", prefix + "2", prefix + "3", prefix + "4" }; } dataDef.setTemplate(template); dataDef.setSelects(selects); return dataDef; } }