// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.dq.pattern; import org.talend.dq.dbms.DbmsLanguage; /** * @author scorreia * * This class helps to transform patterns found in data into regular expressions. */ public class PatternTransformer { private static final String BEGIN = "^"; //$NON-NLS-1$ private static final String END = "$"; //$NON-NLS-1$ private char lowerCase = 'a'; private char upperCase = 'A'; private char numeric = '9'; private String specialChar = ".*?^${}()\\+|[]"; //$NON-NLS-1$ private DbmsLanguage dbmsLanguage; /** * Getter for dbmsLanguage. * * @return the dbmsLanguage */ public DbmsLanguage getDbmsLanguage() { return this.dbmsLanguage; } public PatternTransformer(DbmsLanguage dbms) { assert dbms != null; this.dbmsLanguage = dbms; } private String getRegexpPattern(char inputCharacter) { boolean isJava = !this.dbmsLanguage.isSql(); if (lowerCase == inputCharacter) { return isJava ? "[a-z]" : "[[:lower:]]"; //$NON-NLS-1$ } if (upperCase == inputCharacter) { return isJava ? "[A-Z]" : "[[:upper:]]"; //$NON-NLS-1$ } if (numeric == inputCharacter) { return isJava ? "[0-9]" : "[[:digit:]]"; //$NON-NLS-1$ } if (specialChar.contains(String.valueOf(inputCharacter))) { return "\\" + inputCharacter; //$NON-NLS-1$ } return String.valueOf(inputCharacter); } /** * Method "getRegexp". * * @param input a pattern string where each letter has the meaning of a character class * @return a regular expression built from the input pattern */ public String getRegexp(String input) { if (input == null) { return null; } StringBuilder builder = new StringBuilder(); builder.append(BEGIN); final int length = input.length(); for (int i = 0; i < length; i++) { builder.append(this.getRegexpPattern(input.charAt(i))); } builder.append(END); return builder.toString(); } /** * Getter for lowerCase. * * @return the lowerCase */ public char getLowerCase() { return this.lowerCase; } /** * Sets the lowerCase. * * @param lowerCase the lowerCase to set */ public void setLowerCase(char lowerCase) { this.lowerCase = lowerCase; } /** * Getter for upperCase. * * @return the upperCase */ public char getUpperCase() { return this.upperCase; } /** * Sets the upperCase. * * @param upperCase the upperCase to set */ public void setUpperCase(char upperCase) { this.upperCase = upperCase; } /** * Getter for numeric. * * @return the numeric */ public char getNumeric() { return this.numeric; } /** * Sets the numeric. * * @param numeric the numeric to set */ public void setNumeric(char numeric) { this.numeric = numeric; } }