@Test public void currencyTest() { DataPipe pipeToTransform = new DataPipe(); EquivalenceClassTransformer eqTransformer = new EquivalenceClassTransformer(); String[] currencyCodes = { "AED", "AFN", "ALL", "AMD", "ANG", "AOA", "ARS", "AUD", "AWG", "AZN", "BAM", "BBD", "BDT", "BGN", "BHD", "BIF", "BMD", "BND", "BOB", "BOV", "BRL", "BSD", "BTN", "BWP", "BYR", "BZD", "CAD", "CDF", "CHE", "CHF", "CHW", "CLF", "CLP", "CNY", "COP", "COU", "CRC", "CUC", "CUP", "CVE", "CZK", "DJF", "DKK", "DOP", "DZD", "EGP", "ERN", "ETB", "EUR", "FJD", "FKP", "GBP", "GEL", "GHS", "GIP", "GMD", "GNF", "GTQ", "GYD", "HKD", "HNL", "HRK", "HTG", "HUF", "IDR", "ILS", "INR", "IQD", "IRR", "ISK", "JMD", "JOD", "JPY", "KES", "KGS", "KHR", "KMF", "KPW", "KRW", "KWD", "KYD", "KZT", "LAK", "LBP", "LKR", "LRD", "LSL", "LTL", "LVL", "LYD", "MAD", "MDL", "MGA", "MKD", "MMK", "MNT", "MOP", "MRO", "MUR", "MVR", "MWK", "MXN", "MXV", "MYR", "MZN", "NAD", "NGN", "NIO", "NOK", "NPR", "NZD", "OMR", "PAB", "PEN", "PGK", "PHP", "PKR", "PLN", "PYG", "QAR", "RON", "RSD", "RUB", "RWF", "SAR", "SBD", "SCR", "SDG", "SEK", "SGD", "SHP", "SLL", "SOS", "SRD", "SSP", "STD", "SVC", "SYP", "SZL", "THB", "TJS", "TMT", "TND", "TOP", "TRY", "TTD", "TWD", "TZS", "UAH", "UGX", "USD", "USN", "USS", "UYI", "UYU", "UZS", "VEF", "VND", "VUV", "WST", "XAF", "XAG", "XAU", "XBA", "XBB", "XBC", "XBD", "XCD", "XDR", "XFU", "XOF", "XPD", "XPF", "XPT", "XSU", "XTS", "XUA", "XXX", "YER", "ZAR", "ZMK", "ZWL"}; Assert.assertTrue("Too small number of currency codes!", eqTransformer.CURRENCY_CODES.length >= 180); HashSet<String> currencyCodeLookUp = new HashSet<>(Arrays.asList(currencyCodes)); for (int i = 0; i < 500; i++) { pipeToTransform.getDataMap().put("TEST", "%currency"); eqTransformer.transform(pipeToTransform); Assert.assertTrue(currencyCodeLookUp.contains(pipeToTransform.getDataMap().get("TEST"))); } }
@Override public void transform(DataPipe cr) { Map<String, String> map = cr.getDataMap(); for (Map.Entry<String, String> entry : map.entrySet()) { String value = entry.getValue(); if (value.startsWith("%")) { String macro; String expr; int param = value.indexOf("("); if (param != -1) { macro = value.substring(1, param); expr = value.substring(param + 1, value.length() - 1); } else { macro = value.substring(1); expr = ""; } StringBuilder b = new StringBuilder(); switch (macro) { case "regex": generateFromRegex(b, expr); break; case "alpha": alpha(b, Integer.valueOf(expr)); break; case "alphaWithSpaces": alphaWithSpaces(b, Integer.valueOf(expr)); break; case "number": String[] lengths = expr.split(","); int precision = Integer.valueOf(lengths[0]); int scale = 0; if (lengths.length == 2) { scale = Integer.valueOf(lengths[1]) < 0 ? 0 : Integer.valueOf(lengths[1]); } int wholeDigits = precision - scale < 0 ? 0 : precision - scale; if (wholeDigits == 0 && scale > 0) { b.append("0."); digitSequence(b, scale); } else if (wholeDigits > 0) { b.append(random.nextInt(9) + 1); digitSequence(b, wholeDigits - 1); if (scale > 0) { b.append("."); digitSequence(b, scale); } } break; case "digits": int length = Integer.valueOf(expr); digitSequence(b, length); break; case "ssn": ssn(b); break; case "zip": zip(b); break; case "phoneDomesticUSA": phoneDomesticUSA(b); break; case "phoneDomesticUSAWithExt": phoneDomesticUSAWithExt(b); break; case "currency": b.append(CURRENCY_CODES[random.nextInt(CURRENCY_CODES.length)]); break; case "state": case "stateLong": b.append(STATE_LONG[random.nextInt(STATE_LONG.length)]); break; case "stateShort": b.append(STATES_SHORT[random.nextInt(STATES_SHORT.length)]); break; case "country": case "countryLong": b.append(COUNTRIES[random.nextInt(COUNTRIES.length)]); break; case "symbolNASDAQ": b.append(SYMBOLS_NASDAQ[random.nextInt(SYMBOLS_NASDAQ.length)]); break; case "symbolNotNASDAQ": b.append(SYMBOLS_NOT_NASDAQ[random.nextInt(SYMBOLS_NOT_NASDAQ.length)]); break; case "securityNameNASDAQ": b.append(SECURITY_NAMES_NASDAQ[random.nextInt(SECURITY_NAMES_NASDAQ.length)]); break; case "securityNameNotNASDAQ": b.append(SECURITY_NAMES_NOT_NASDAQ[random.nextInt(SECURITY_NAMES_NOT_NASDAQ.length)]); break; default: b.append(value); break; } entry.setValue(b.toString()); } else if (value.startsWith("$")) { String variable, varValue; int param = value.indexOf("{"); if (param != -1) { variable = value.substring(param + 1, value.length() - 1); } else { variable = value.substring(1); } if (map.containsKey(variable)) { varValue = map.get(variable); } else { varValue = null; } entry.setValue(varValue); } } }
EquivalenceClassTransformer implements DataTransformer { @Override public void transform(DataPipe cr) { Map<String, String> map = cr.getDataMap(); for (Map.Entry<String, String> entry : map.entrySet()) { String value = entry.getValue(); if (value.startsWith("%")) { String macro; String expr; int param = value.indexOf("("); if (param != -1) { macro = value.substring(1, param); expr = value.substring(param + 1, value.length() - 1); } else { macro = value.substring(1); expr = ""; } StringBuilder b = new StringBuilder(); switch (macro) { case "regex": generateFromRegex(b, expr); break; case "alpha": alpha(b, Integer.valueOf(expr)); break; case "alphaWithSpaces": alphaWithSpaces(b, Integer.valueOf(expr)); break; case "number": String[] lengths = expr.split(","); int precision = Integer.valueOf(lengths[0]); int scale = 0; if (lengths.length == 2) { scale = Integer.valueOf(lengths[1]) < 0 ? 0 : Integer.valueOf(lengths[1]); } int wholeDigits = precision - scale < 0 ? 0 : precision - scale; if (wholeDigits == 0 && scale > 0) { b.append("0."); digitSequence(b, scale); } else if (wholeDigits > 0) { b.append(random.nextInt(9) + 1); digitSequence(b, wholeDigits - 1); if (scale > 0) { b.append("."); digitSequence(b, scale); } } break; case "digits": int length = Integer.valueOf(expr); digitSequence(b, length); break; case "ssn": ssn(b); break; case "zip": zip(b); break; case "phoneDomesticUSA": phoneDomesticUSA(b); break; case "phoneDomesticUSAWithExt": phoneDomesticUSAWithExt(b); break; case "currency": b.append(CURRENCY_CODES[random.nextInt(CURRENCY_CODES.length)]); break; case "state": case "stateLong": b.append(STATE_LONG[random.nextInt(STATE_LONG.length)]); break; case "stateShort": b.append(STATES_SHORT[random.nextInt(STATES_SHORT.length)]); break; case "country": case "countryLong": b.append(COUNTRIES[random.nextInt(COUNTRIES.length)]); break; case "symbolNASDAQ": b.append(SYMBOLS_NASDAQ[random.nextInt(SYMBOLS_NASDAQ.length)]); break; case "symbolNotNASDAQ": b.append(SYMBOLS_NOT_NASDAQ[random.nextInt(SYMBOLS_NOT_NASDAQ.length)]); break; case "securityNameNASDAQ": b.append(SECURITY_NAMES_NASDAQ[random.nextInt(SECURITY_NAMES_NASDAQ.length)]); break; case "securityNameNotNASDAQ": b.append(SECURITY_NAMES_NOT_NASDAQ[random.nextInt(SECURITY_NAMES_NOT_NASDAQ.length)]); break; default: b.append(value); break; } entry.setValue(b.toString()); } else if (value.startsWith("$")) { String variable, varValue; int param = value.indexOf("{"); if (param != -1) { variable = value.substring(param + 1, value.length() - 1); } else { variable = value.substring(1); } if (map.containsKey(variable)) { varValue = map.get(variable); } else { varValue = null; } entry.setValue(varValue); } } } }
EquivalenceClassTransformer implements DataTransformer { @Override public void transform(DataPipe cr) { Map<String, String> map = cr.getDataMap(); for (Map.Entry<String, String> entry : map.entrySet()) { String value = entry.getValue(); if (value.startsWith("%")) { String macro; String expr; int param = value.indexOf("("); if (param != -1) { macro = value.substring(1, param); expr = value.substring(param + 1, value.length() - 1); } else { macro = value.substring(1); expr = ""; } StringBuilder b = new StringBuilder(); switch (macro) { case "regex": generateFromRegex(b, expr); break; case "alpha": alpha(b, Integer.valueOf(expr)); break; case "alphaWithSpaces": alphaWithSpaces(b, Integer.valueOf(expr)); break; case "number": String[] lengths = expr.split(","); int precision = Integer.valueOf(lengths[0]); int scale = 0; if (lengths.length == 2) { scale = Integer.valueOf(lengths[1]) < 0 ? 0 : Integer.valueOf(lengths[1]); } int wholeDigits = precision - scale < 0 ? 0 : precision - scale; if (wholeDigits == 0 && scale > 0) { b.append("0."); digitSequence(b, scale); } else if (wholeDigits > 0) { b.append(random.nextInt(9) + 1); digitSequence(b, wholeDigits - 1); if (scale > 0) { b.append("."); digitSequence(b, scale); } } break; case "digits": int length = Integer.valueOf(expr); digitSequence(b, length); break; case "ssn": ssn(b); break; case "zip": zip(b); break; case "phoneDomesticUSA": phoneDomesticUSA(b); break; case "phoneDomesticUSAWithExt": phoneDomesticUSAWithExt(b); break; case "currency": b.append(CURRENCY_CODES[random.nextInt(CURRENCY_CODES.length)]); break; case "state": case "stateLong": b.append(STATE_LONG[random.nextInt(STATE_LONG.length)]); break; case "stateShort": b.append(STATES_SHORT[random.nextInt(STATES_SHORT.length)]); break; case "country": case "countryLong": b.append(COUNTRIES[random.nextInt(COUNTRIES.length)]); break; case "symbolNASDAQ": b.append(SYMBOLS_NASDAQ[random.nextInt(SYMBOLS_NASDAQ.length)]); break; case "symbolNotNASDAQ": b.append(SYMBOLS_NOT_NASDAQ[random.nextInt(SYMBOLS_NOT_NASDAQ.length)]); break; case "securityNameNASDAQ": b.append(SECURITY_NAMES_NASDAQ[random.nextInt(SECURITY_NAMES_NASDAQ.length)]); break; case "securityNameNotNASDAQ": b.append(SECURITY_NAMES_NOT_NASDAQ[random.nextInt(SECURITY_NAMES_NOT_NASDAQ.length)]); break; default: b.append(value); break; } entry.setValue(b.toString()); } else if (value.startsWith("$")) { String variable, varValue; int param = value.indexOf("{"); if (param != -1) { variable = value.substring(param + 1, value.length() - 1); } else { variable = value.substring(1); } if (map.containsKey(variable)) { varValue = map.get(variable); } else { varValue = null; } entry.setValue(varValue); } } } EquivalenceClassTransformer(); }
EquivalenceClassTransformer implements DataTransformer { @Override public void transform(DataPipe cr) { Map<String, String> map = cr.getDataMap(); for (Map.Entry<String, String> entry : map.entrySet()) { String value = entry.getValue(); if (value.startsWith("%")) { String macro; String expr; int param = value.indexOf("("); if (param != -1) { macro = value.substring(1, param); expr = value.substring(param + 1, value.length() - 1); } else { macro = value.substring(1); expr = ""; } StringBuilder b = new StringBuilder(); switch (macro) { case "regex": generateFromRegex(b, expr); break; case "alpha": alpha(b, Integer.valueOf(expr)); break; case "alphaWithSpaces": alphaWithSpaces(b, Integer.valueOf(expr)); break; case "number": String[] lengths = expr.split(","); int precision = Integer.valueOf(lengths[0]); int scale = 0; if (lengths.length == 2) { scale = Integer.valueOf(lengths[1]) < 0 ? 0 : Integer.valueOf(lengths[1]); } int wholeDigits = precision - scale < 0 ? 0 : precision - scale; if (wholeDigits == 0 && scale > 0) { b.append("0."); digitSequence(b, scale); } else if (wholeDigits > 0) { b.append(random.nextInt(9) + 1); digitSequence(b, wholeDigits - 1); if (scale > 0) { b.append("."); digitSequence(b, scale); } } break; case "digits": int length = Integer.valueOf(expr); digitSequence(b, length); break; case "ssn": ssn(b); break; case "zip": zip(b); break; case "phoneDomesticUSA": phoneDomesticUSA(b); break; case "phoneDomesticUSAWithExt": phoneDomesticUSAWithExt(b); break; case "currency": b.append(CURRENCY_CODES[random.nextInt(CURRENCY_CODES.length)]); break; case "state": case "stateLong": b.append(STATE_LONG[random.nextInt(STATE_LONG.length)]); break; case "stateShort": b.append(STATES_SHORT[random.nextInt(STATES_SHORT.length)]); break; case "country": case "countryLong": b.append(COUNTRIES[random.nextInt(COUNTRIES.length)]); break; case "symbolNASDAQ": b.append(SYMBOLS_NASDAQ[random.nextInt(SYMBOLS_NASDAQ.length)]); break; case "symbolNotNASDAQ": b.append(SYMBOLS_NOT_NASDAQ[random.nextInt(SYMBOLS_NOT_NASDAQ.length)]); break; case "securityNameNASDAQ": b.append(SECURITY_NAMES_NASDAQ[random.nextInt(SECURITY_NAMES_NASDAQ.length)]); break; case "securityNameNotNASDAQ": b.append(SECURITY_NAMES_NOT_NASDAQ[random.nextInt(SECURITY_NAMES_NOT_NASDAQ.length)]); break; default: b.append(value); break; } entry.setValue(b.toString()); } else if (value.startsWith("$")) { String variable, varValue; int param = value.indexOf("{"); if (param != -1) { variable = value.substring(param + 1, value.length() - 1); } else { variable = value.substring(1); } if (map.containsKey(variable)) { varValue = map.get(variable); } else { varValue = null; } entry.setValue(varValue); } } } EquivalenceClassTransformer(); @Override void transform(DataPipe cr); }
EquivalenceClassTransformer implements DataTransformer { @Override public void transform(DataPipe cr) { Map<String, String> map = cr.getDataMap(); for (Map.Entry<String, String> entry : map.entrySet()) { String value = entry.getValue(); if (value.startsWith("%")) { String macro; String expr; int param = value.indexOf("("); if (param != -1) { macro = value.substring(1, param); expr = value.substring(param + 1, value.length() - 1); } else { macro = value.substring(1); expr = ""; } StringBuilder b = new StringBuilder(); switch (macro) { case "regex": generateFromRegex(b, expr); break; case "alpha": alpha(b, Integer.valueOf(expr)); break; case "alphaWithSpaces": alphaWithSpaces(b, Integer.valueOf(expr)); break; case "number": String[] lengths = expr.split(","); int precision = Integer.valueOf(lengths[0]); int scale = 0; if (lengths.length == 2) { scale = Integer.valueOf(lengths[1]) < 0 ? 0 : Integer.valueOf(lengths[1]); } int wholeDigits = precision - scale < 0 ? 0 : precision - scale; if (wholeDigits == 0 && scale > 0) { b.append("0."); digitSequence(b, scale); } else if (wholeDigits > 0) { b.append(random.nextInt(9) + 1); digitSequence(b, wholeDigits - 1); if (scale > 0) { b.append("."); digitSequence(b, scale); } } break; case "digits": int length = Integer.valueOf(expr); digitSequence(b, length); break; case "ssn": ssn(b); break; case "zip": zip(b); break; case "phoneDomesticUSA": phoneDomesticUSA(b); break; case "phoneDomesticUSAWithExt": phoneDomesticUSAWithExt(b); break; case "currency": b.append(CURRENCY_CODES[random.nextInt(CURRENCY_CODES.length)]); break; case "state": case "stateLong": b.append(STATE_LONG[random.nextInt(STATE_LONG.length)]); break; case "stateShort": b.append(STATES_SHORT[random.nextInt(STATES_SHORT.length)]); break; case "country": case "countryLong": b.append(COUNTRIES[random.nextInt(COUNTRIES.length)]); break; case "symbolNASDAQ": b.append(SYMBOLS_NASDAQ[random.nextInt(SYMBOLS_NASDAQ.length)]); break; case "symbolNotNASDAQ": b.append(SYMBOLS_NOT_NASDAQ[random.nextInt(SYMBOLS_NOT_NASDAQ.length)]); break; case "securityNameNASDAQ": b.append(SECURITY_NAMES_NASDAQ[random.nextInt(SECURITY_NAMES_NASDAQ.length)]); break; case "securityNameNotNASDAQ": b.append(SECURITY_NAMES_NOT_NASDAQ[random.nextInt(SECURITY_NAMES_NOT_NASDAQ.length)]); break; default: b.append(value); break; } entry.setValue(b.toString()); } else if (value.startsWith("$")) { String variable, varValue; int param = value.indexOf("{"); if (param != -1) { variable = value.substring(param + 1, value.length() - 1); } else { variable = value.substring(1); } if (map.containsKey(variable)) { varValue = map.get(variable); } else { varValue = null; } entry.setValue(varValue); } } } EquivalenceClassTransformer(); @Override void transform(DataPipe cr); static final String[] CURRENCY_CODES; static final String[] STATE_LONG; static final String[] STATES_SHORT; static final Holiday[] HOLIDAYS; static final String[] COUNTRIES; static final int COUNT_NASDAQ_SECURITIES; static final String[] SYMBOLS_NASDAQ; static final String[] SECURITY_NAMES_NASDAQ; static final int COUNT_NOT_NASDAQ_SECURITIES; static final String[] SYMBOLS_NOT_NASDAQ; static final String[] SECURITY_NAMES_NOT_NASDAQ; }