// ============================================================================
//
// 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.dataquality.datamasking;
import org.talend.dataquality.datamasking.functions.Function;
/**
* created by jgonzalez on 18 juin 2015 This class is the factory that will instanciate the correct function.
*
*/
public class FunctionFactory {
private Function<?> getFunction(Class<?> clazz) throws InstantiationException, IllegalAccessException {
return (Function<?>) clazz.newInstance();
}
private Function<?> getFunction3(FunctionType type, int javaType) throws InstantiationException, IllegalAccessException {
Function<?> res;
if (type == FunctionType.REPLACE_LAST_CHARS) {
switch (javaType) {
case 0:
res = getFunction(FunctionType.REPLACE_LAST_CHARS_INT.getClazz());
break;
case 1:
res = getFunction(FunctionType.REPLACE_LAST_CHARS_LONG.getClazz());
break;
case 4:
res = getFunction(FunctionType.REPLACE_LAST_CHARS_STRING.getClazz());
break;
default:
res = null;
break;
}
} else if (type == FunctionType.REPLACE_NUMERIC) {
switch (javaType) {
case 0:
res = getFunction(FunctionType.REPLACE_NUMERIC_INT.getClazz());
break;
case 1:
res = getFunction(FunctionType.REPLACE_NUMERIC_LONG.getClazz());
break;
case 2:
res = getFunction(FunctionType.REPLACE_NUMERIC_FLOAT.getClazz());
break;
case 3:
res = getFunction(FunctionType.REPLACE_NUMERIC_DOUBLE.getClazz());
break;
case 4:
res = getFunction(FunctionType.REPLACE_NUMERIC_STRING.getClazz());
break;
default:
res = null;
break;
}
} else {
res = getFunction(type.getClazz());
}
return res;
}
private Function<?> getFunction2(FunctionType type, int javaType) throws InstantiationException, IllegalAccessException {
Function<?> res;
if (type == FunctionType.GENERATE_FROM_LIST_HASH) {
switch (javaType) {
case 0:
res = getFunction(FunctionType.GENERATE_FROM_LIST_HASH_INT.getClazz());
break;
case 1:
res = getFunction(FunctionType.GENERATE_FROM_LIST_HASH_LONG.getClazz());
break;
case 4:
res = getFunction(FunctionType.GENERATE_FROM_LIST_HASH_STRING.getClazz());
break;
default:
res = null;
break;
}
} else if (type == FunctionType.GENERATE_FROM_FILE_HASH) {
switch (javaType) {
case 0:
res = getFunction(FunctionType.GENERATE_FROM_FILE_HASH_INT.getClazz());
break;
case 1:
res = getFunction(FunctionType.GENERATE_FROM_FILE_HASH_LONG.getClazz());
break;
case 4:
res = getFunction(FunctionType.GENERATE_FROM_FILE_HASH_STRING.getClazz());
break;
default:
res = null;
break;
}
} else if (type == FunctionType.GENERATE_SEQUENCE) {
switch (javaType) {
case 0:
res = getFunction(FunctionType.GENERATE_SEQUENCE_INT.getClazz());
break;
case 1:
res = getFunction(FunctionType.GENERATE_SEQUENCE_LONG.getClazz());
break;
case 2:
res = getFunction(FunctionType.GENERATE_SEQUENCE_FLOAT.getClazz());
break;
case 3:
res = getFunction(FunctionType.GENERATE_SEQUENCE_DOUBLE.getClazz());
break;
case 4:
res = getFunction(FunctionType.GENERATE_SEQUENCE_STRING.getClazz());
break;
default:
res = null;
break;
}
} else if (type == FunctionType.NUMERIC_VARIANCE) {
switch (javaType) {
case 0:
res = getFunction(FunctionType.NUMERIC_VARIANCE_INT.getClazz());
break;
case 1:
res = getFunction(FunctionType.NUMERIC_VARIANCE_LONG.getClazz());
break;
case 2:
res = getFunction(FunctionType.NUMERIC_VARIANCE_FlOAT.getClazz());
break;
case 3:
res = getFunction(FunctionType.NUMERIC_VARIANCE_DOUBLE.getClazz());
break;
default:
res = null;
break;
}
} else if (type == FunctionType.REMOVE_FIRST_CHARS) {
switch (javaType) {
case 0:
res = getFunction(FunctionType.REMOVE_FIRST_CHARS_INT.getClazz());
break;
case 1:
res = getFunction(FunctionType.REMOVE_FIRST_CHARS_LONG.getClazz());
break;
case 4:
res = getFunction(FunctionType.REMOVE_FIRST_CHARS_STRING.getClazz());
break;
default:
res = null;
break;
}
} else if (type == FunctionType.REMOVE_LAST_CHARS) {
switch (javaType) {
case 0:
res = getFunction(FunctionType.REMOVE_LAST_CHARS_INT.getClazz());
break;
case 1:
res = getFunction(FunctionType.REMOVE_LAST_CHARS_LONG.getClazz());
break;
case 4:
res = getFunction(FunctionType.REMOVE_LAST_CHARS_STRING.getClazz());
break;
default:
res = null;
break;
}
} else if (type == FunctionType.REPLACE_FIRST_CHARS) {
switch (javaType) {
case 0:
res = getFunction(FunctionType.REPLACE_FIRST_CHARS_INT.getClazz());
break;
case 1:
res = getFunction(FunctionType.REPLACE_FIRST_CHARS_LONG.getClazz());
break;
case 4:
res = getFunction(FunctionType.REPLACE_FIRST_CHARS_STRING.getClazz());
break;
default:
res = null;
break;
}
} else {
res = getFunction3(type, javaType);
}
return res;
}
/**
* DOC jgonzalez Comment method "getFunction". This function is used to res = the correct function according to the
* user choice.
*
* @param type The function requested by the user.
* @param javaType Some functions work and several type, this parameter represents the wanted type.
* @res = A new function.
* @throws InstantiationException
* @throws IllegalAccessException
*/
public Function<?> getFunction(FunctionType type, int javaType) throws InstantiationException, IllegalAccessException {
Function<?> res;
if (type == FunctionType.KEEP_FIRST_AND_GENERATE) {
switch (javaType) {
case 0:
res = getFunction(FunctionType.KEEP_FIRST_AND_GENERATE_INT.getClazz());
break;
case 1:
res = getFunction(FunctionType.KEEP_FIRST_AND_GENERATE_LONG.getClazz());
break;
case 4:
res = getFunction(FunctionType.KEEP_FIRST_AND_GENERATE_STRING.getClazz());
break;
default:
res = null;
break;
}
} else if (type == FunctionType.KEEP_LAST_AND_GENERATE) {
switch (javaType) {
case 0:
res = getFunction(FunctionType.KEEP_LAST_AND_GENERATE_INT.getClazz());
break;
case 1:
res = getFunction(FunctionType.KEEP_LAST_AND_GENERATE_LONG.getClazz());
break;
case 4:
res = getFunction(FunctionType.KEEP_LAST_AND_GENERATE_STRING.getClazz());
break;
default:
res = null;
break;
}
} else if (type == FunctionType.GENERATE_BETWEEN) {
switch (javaType) {
case 0:
res = getFunction(FunctionType.GENERATE_BETWEEN_INT.getClazz());
break;
case 1:
res = getFunction(FunctionType.GENERATE_BETWEEN_LONG.getClazz());
break;
case 2:
res = getFunction(FunctionType.GENERATE_BETWEEN_FLOAT.getClazz());
break;
case 3:
res = getFunction(FunctionType.GENERATE_BETWEEN_DOUBLE.getClazz());
break;
case 4:
res = getFunction(FunctionType.GENERATE_BETWEEN_STRING.getClazz());
break;
case 5:
res = getFunction(FunctionType.GENERATE_BETWEEN_DATE.getClazz());
break;
default:
res = null;
break;
}
} else if (type == FunctionType.GENERATE_CREDIT_CARD_FORMAT) {
switch (javaType) {
case 1:
res = getFunction(FunctionType.GENERATE_CREDIT_CARD_FORMAT_LONG.getClazz());
break;
case 4:
res = getFunction(FunctionType.GENERATE_CREDIT_CARD_FORMAT_STRING.getClazz());
break;
default:
res = null;
break;
}
} else if (type == FunctionType.GENERATE_CREDIT_CARD) {
switch (javaType) {
case 1:
res = getFunction(FunctionType.GENERATE_CREDIT_CARD_LONG.getClazz());
break;
case 4:
res = getFunction(FunctionType.GENERATE_CREDIT_CARD_STRING.getClazz());
break;
default:
res = null;
break;
}
} else if (type == FunctionType.GENERATE_FROM_FILE) {
switch (javaType) {
case 0:
res = getFunction(FunctionType.GENERATE_FROM_FILE_INT.getClazz());
break;
case 1:
res = getFunction(FunctionType.GENERATE_FROM_FILE_LONG.getClazz());
break;
case 4:
res = getFunction(FunctionType.GENERATE_FROM_FILE_STRING.getClazz());
break;
default:
res = null;
break;
}
} else if (type == FunctionType.GENERATE_FROM_LIST) {
switch (javaType) {
case 0:
res = getFunction(FunctionType.GENERATE_FROM_LIST_INT.getClazz());
break;
case 1:
res = getFunction(FunctionType.GENERATE_FROM_LIST_LONG.getClazz());
break;
case 4:
res = getFunction(FunctionType.GENERATE_FROM_LIST_STRING.getClazz());
break;
default:
res = null;
break;
}
} else {
res = getFunction2(type, javaType);
}
return res;
}
}