// ============================================================================
//
// 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.helper;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.talend.core.model.metadata.IMetadataConnection;
import org.talend.core.utils.TalendQuoteUtils;
import org.talend.cwm.helper.TaggedValueHelper;
import org.talend.dq.analysis.parameters.DBConnectionParameter;
import org.talend.metadata.managment.model.MetadataFillFactory;
/**
* DOC zshen class global comment. Detailled comment.
*/
public final class ParameterUtil {
private static Logger log = Logger.getLogger(ParameterUtil.class);
private ParameterUtil() {
}
private static Map<String, String> toMap(Object parameter) {
Class<?> parClass = parameter.getClass();
Map<String, String> parameterMap = new HashMap<String, String>();
List<Field> fieldList = new ArrayList<Field>();
fieldList.addAll(Arrays.asList(parClass.getDeclaredFields()));
for (Field theField : fieldList) {
String methodName = theField.getName();
if (methodName != null && methodName.length() > 0) {
if (theField.getType().equals(String.class)) {
methodName = "get" + methodName.toUpperCase().substring(0, 1) + methodName.substring(1);//$NON-NLS-1$
} else if (theField.getType().equals(boolean.class) || theField.getType().equals(Boolean.class)) {
methodName = "is" + methodName.toUpperCase().substring(0, 1) + methodName.substring(1);//$NON-NLS-1$
} else {
continue;
}
try {
Object parameterValue = parClass.getMethod(methodName).invoke(parameter);
parameterMap.put(theField.getName(), parameterValue == null ? null : parameterValue.toString());
} catch (IllegalArgumentException e) {
log.error(e, e);
} catch (SecurityException e) {
log.error(e, e);
} catch (IllegalAccessException e) {
log.error(e, e);
} catch (InvocationTargetException e) {
log.error(e, e);
} catch (NoSuchMethodException e) {
log.error(e, e);
}
}
}
return parameterMap;
}
/**
* zshen Comment method "toMap".
*
* @param parameter the object which pass to parameter infomation.It can't be null.
* @return a map which contain both name of attribute and the it's value.return a null when parameter is null.
*/
public static Map<String, String> toMap(DBConnectionParameter parameter) {
if (parameter == null) {
return null;
}
Map<String, String> parameterMap = toMap((Object) parameter);
parameterMap.put("name", parameter.getName());//$NON-NLS-1$
parameterMap.put("purpose", parameter.getPurpose());//$NON-NLS-1$
parameterMap.put("description", parameter.getDescription());//$NON-NLS-1$
parameterMap.put("author", parameter.getAuthor());//$NON-NLS-1$
parameterMap.put("status", parameter.getStatus());//$NON-NLS-1$
parameterMap.put("version", parameter.getVersion());//$NON-NLS-1$
parameterMap.put("uiSchema", parameter.getFilterSchema());//$NON-NLS-1$
parameterMap.put("universe", parameter.getParameters().getProperty(TaggedValueHelper.UNIVERSE));//$NON-NLS-1$
parameterMap.put("datafilter", parameter.getParameters().getProperty(TaggedValueHelper.DATA_FILTER));//$NON-NLS-1$
parameterMap.put(TaggedValueHelper.RETRIEVE_ALL, String.valueOf(parameter.isRetrieveAllMetadata()));
parameterMap.put(TaggedValueHelper.PASSWORD, parameter.getParameters().getProperty(TaggedValueHelper.PASSWORD));
parameterMap.put(TaggedValueHelper.USER, parameter.getParameters().getProperty(TaggedValueHelper.USER));
return parameterMap;
}
/**
*
* qiongli remove the enclosed quotes and rpalace special String.
*
* @param value
* @return
*/
public static String trimParameter(String value) {
if (value == null) {
return null;
}
int length = value.length();
String result = TalendQuoteUtils.removeQuotes(value);
if (length > 1 && ((value.startsWith("\"") && value.endsWith("\""))) || (value.startsWith("\'") && value.endsWith("\'"))) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
result = value.substring(1, length - 1);
if (result.contains("\\")) { //$NON-NLS-1$
result = result.replaceAll("\\\\n", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
result = result.replaceAll("\\\\b", "\b"); //$NON-NLS-1$ //$NON-NLS-2$
result = result.replaceAll("\\\\f", "\f"); //$NON-NLS-1$ //$NON-NLS-2$
result = result.replaceAll("\\\\r", "\r"); //$NON-NLS-1$ //$NON-NLS-2$
result = result.replaceAll("\\\\t", "\t"); //$NON-NLS-1$ //$NON-NLS-2$
result = result.replaceAll("\\\\\"", "\""); //$NON-NLS-1$ //$NON-NLS-2$
result = result.replaceAll("\\\\\\\\", "\\\\"); //$NON-NLS-1$ //$NON-NLS-2$
}
}
return result;
}
/**
*
* zshen Comment method "main". a test for the method toMap.
*
* @param args
*/
@SuppressWarnings("unused")
private static void main(String[] args) {
DBConnectionParameter dbParameter = new DBConnectionParameter();
dbParameter.setParameters(new Properties());
Map<String, String> parameterMap = ParameterUtil.toMap(dbParameter);
IMetadataConnection metadataConnection = MetadataFillFactory.getDBInstance().fillUIParams(parameterMap);
System.out.println(metadataConnection);
}
}