// ============================================================================
//
// 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.dataprofiler.core.ui.imex;
import java.io.File;
import org.apache.commons.lang.StringUtils;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.talend.commons.emf.FactoriesUtil;
import org.talend.core.model.metadata.builder.connection.DelimitedFileConnection;
import org.talend.dataprofiler.core.ImageLib;
import org.talend.dataprofiler.core.ui.imex.model.ItemRecord;
import org.talend.dataquality.rules.MatchRuleDefinition;
import org.talend.resource.EResourceConstant;
/**
* DOC bZhou class global comment. Detailled comment
*/
public class FileTreeLabelProvider extends LabelProvider {
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
*/
@Override
public Image getImage(Object element) {
Image image = null;
if (element instanceof ItemRecord) {
ItemRecord record = (ItemRecord) element;
File file = record.getFile();
String fileName = file.getName();
if (file.isDirectory()) {
image = ImageLib.getImage(ImageLib.FOLDERNODE_IMAGE);
EResourceConstant constant = resolveResourceConstant(fileName);
if (constant != null) {
switch (constant) {
case DATA_PROFILING:
image = ImageLib.getImage(ImageLib.DATA_PROFILING);
break;
case METADATA:
image = ImageLib.getImage(ImageLib.METADATA);
break;
case LIBRARIES:
image = ImageLib.getImage(ImageLib.LIBRARIES);
break;
case ANALYSIS:
break;
case REPORTS:
break;
case EXCHANGE:
image = ImageLib.getImage(ImageLib.EXCHANGE);
break;
case DB_CONNECTIONS:
image = ImageLib.getImage(ImageLib.CONNECTION);
break;
case FILEDELIMITED:
image = ImageLib.getImage(ImageLib.FILE_DELIMITED);
break;
case HADOOP_CLUSTER:
image = ImageLib.getImage(ImageLib.HADOOP_CLUSTER);
break;
default:
break;
}
}
} else {
if (fileName.endsWith(FactoriesUtil.ANA)) {
image = ImageLib.getImage(ImageLib.ANALYSIS_OBJECT);
} else if (fileName.endsWith(FactoriesUtil.REP)) {
image = ImageLib.getImage(ImageLib.REPORT_OBJECT);
} else if (fileName.endsWith(FactoriesUtil.PATTERN)) {
image = ImageLib.getImage(ImageLib.PATTERN_REG);
} else if (fileName.endsWith(FactoriesUtil.DQRULE)) {
if (record.getElement() instanceof MatchRuleDefinition) {
image = ImageLib.getImage(ImageLib.MATCH_RULE_ICON);
} else {
image = ImageLib.getImage(ImageLib.DQ_RULE);
}
} else if (fileName.endsWith(FactoriesUtil.ITEM_EXTENSION)) {
if (record.getElement() instanceof DelimitedFileConnection) {
image = ImageLib.getImage(ImageLib.FILE_DELIMITED);
} else {
image = ImageLib.getImage(ImageLib.TD_DATAPROVIDER);
}
} else if (fileName.endsWith(FactoriesUtil.DEFINITION)) {
image = ImageLib.getImage(ImageLib.IND_DEFINITION);
} else if (fileName.endsWith(FactoriesUtil.SQL)) {
image = ImageLib.getImage(ImageLib.SOURCE_FILE);
} else if (fileName.endsWith(FactoriesUtil.JAR)) {
image = ImageLib.getImage(ImageLib.JAR_FILE);
} else if (fileName.endsWith(FactoriesUtil.JRXML)) {
image = ImageLib.getImage(ImageLib.JRXML_ICON);
}
}
}
return image != null ? image : super.getImage(element);
}
/**
* DOC bZhou Comment method "resolveResourceConstant".
*
* @param fileName
* @return
*/
private EResourceConstant resolveResourceConstant(String fileName) {
for (EResourceConstant constant : EResourceConstant.values()) {
if (StringUtils.equals(constant.getName(), fileName)) {
return constant;
}
}
return null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
*/
@Override
public String getText(Object element) {
if (element instanceof ItemRecord) {
ItemRecord record = (ItemRecord) element;
String label = record.getName();
// make the display text the same as dq repository view
if (label.equals(EResourceConstant.DATA_PROFILING.getName()) || label.equals(EResourceConstant.LIBRARIES.getName())) {
return label.substring(4, label.length());
} else if (label.equals(EResourceConstant.METADATA.getName())) {
return label.substring(0, 1).toUpperCase() + label.substring(1);
}
return label;
}
return super.getText(element);
}
}