// ============================================================================
//
// 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.commons.emf;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.talend.core.model.properties.DatabaseConnectionItem;
import org.talend.core.model.properties.DelimitedFileConnectionItem;
import org.talend.core.model.properties.Item;
import org.talend.core.model.properties.MDMConnectionItem;
import org.talend.core.model.properties.PropertiesFactory;
import org.talend.cwm.constants.ConstantsFactory;
import org.talend.cwm.relational.RelationalFactory;
import org.talend.cwm.relational.RelationalPackage;
import org.talend.cwm.softwaredeployment.SoftwaredeploymentPackage;
import org.talend.dataquality.analysis.AnalysisFactory;
import org.talend.dataquality.analysis.category.CategoryFactory;
import org.talend.dataquality.analysis.category.CategoryPackage;
import org.talend.dataquality.domain.DomainFactory;
import org.talend.dataquality.domain.DomainPackage;
import org.talend.dataquality.domain.pattern.PatternFactory;
import org.talend.dataquality.domain.pattern.PatternPackage;
import org.talend.dataquality.indicators.IndicatorsFactory;
import org.talend.dataquality.indicators.IndicatorsPackage;
import org.talend.dataquality.indicators.definition.DefinitionFactory;
import org.talend.dataquality.indicators.definition.DefinitionPackage;
import org.talend.dataquality.properties.TDQAnalysisItem;
import org.talend.dataquality.properties.TDQBusinessRuleItem;
import org.talend.dataquality.properties.TDQIndicatorDefinitionItem;
import org.talend.dataquality.properties.TDQJrxmlItem;
import org.talend.dataquality.properties.TDQPatternItem;
import org.talend.dataquality.properties.TDQReportItem;
import org.talend.dataquality.properties.TDQSourceFileItem;
import org.talend.dataquality.properties.util.PropertiesSwitch;
import org.talend.dataquality.reports.ReportsFactory;
import org.talend.dataquality.reports.ReportsPackage;
import org.talend.dataquality.rules.RulesFactory;
import org.talend.dataquality.rules.RulesPackage;
import orgomg.cwm.foundation.typemapping.TypemappingPackage;
import orgomg.cwm.objectmodel.core.CorePackage;
/**
* @author scorreia
*
* This class is a utility for CWM and Talend extension Factories initialization. MODSCA 2008-04-03 use
* Factory.eINSTANCE.getEPackage() instead of FactoryImpl.init() so that implementation packages can be hidden.
*/
public final class FactoriesUtil {
/**
* Extension used for the files in which the data provider objects are serialized.
*/
public static final String PROV = "prv"; //$NON-NLS-1$
/**
* Extension used for the files in which the analysis objects are serialized.
*/
public static final String ANA = "ana"; //$NON-NLS-1$
/**
* Extension used for the files in which the catalog or schema objects are serialized.
*/
public static final String CAT = "cat"; //$NON-NLS-1$
/**
* Extension used for the files in which the reports are serialized.
*/
public static final String REP = "rep"; //$NON-NLS-1$
/**
* Extension used for the files of jrxml report. MOD mzhao 2009-05-11, feature:6894
*/
public static final String JRXML = "jrxml"; //$NON-NLS-1$
/**
* Extension used for the files in which the sql are serialized.
*/
public static final String SQL = "sql"; //$NON-NLS-1$
/**
* Extension used for the files in which the jar are serialized.
*/
public static final String JAR = "jar"; //$NON-NLS-1$
/**
* Extension used for the files which is integrated in TOS properties.
*/
public static final String PROPERTIES_EXTENSION = "properties"; //$NON-NLS-1$
/**
* Extension used for the files which is integrated in TOS item.
*/
public static final String ITEM_EXTENSION = "item"; //$NON-NLS-1$
/**
* Extension used for the files used for software deployment.
*/
public static final String SOFTWARE_SYSTEM = SoftwaredeploymentPackage.eNAME;
/**
* Extension used for the files in which the System Indicators are serialized.
*/
public static final String DEFINITION = DefinitionPackage.eNAME;
/**
* Extension used for the files in which the pattern are serialized.
*/
public static final String PATTERN = PatternPackage.eNAME;
/**
* Extension used for the files in which the DQRule are serialized.
*/
public static final String DQRULE = RulesPackage.eNAME;
/**
* Extension used for xml configuration file
*/
public static final String XML = "xml";//$NON-NLS-1$
private FactoriesUtil() {
}
/**
* Method "initializeAllFactories" calls static method init() for each of the factories in this project. This is
* needed when writing EMF files.
*/
public static void initializeAllFactories() {
// --- talend extension packages
ConstantsFactory.eINSTANCE.getEPackage();
org.talend.cwm.softwaredeployment.SoftwaredeploymentFactory.eINSTANCE.getEPackage();
RelationalFactory.eINSTANCE.getRelationalPackage();
PropertiesFactory.eINSTANCE.getPropertiesPackage();
// --- talend DQ factories
AnalysisFactory.eINSTANCE.getAnalysisPackage();
DomainFactory.eINSTANCE.getDomainPackage();
IndicatorsFactory.eINSTANCE.getIndicatorsPackage();
ReportsFactory.eINSTANCE.getReportsPackage();
DefinitionFactory.eINSTANCE.getDefinitionPackage();
PatternFactory.eINSTANCE.getEPackage();
CategoryFactory.eINSTANCE.getEPackage();
org.talend.dataquality.expressions.ExpressionsFactory.eINSTANCE.getEPackage();
org.talend.dataquality.reports.ReportsFactory.eINSTANCE.getEPackage();
RulesFactory.eINSTANCE.getEPackage();
// CWM generated packages
// TODO scorreia add other factories
orgomg.cwm.foundation.softwaredeployment.SoftwaredeploymentFactory.eINSTANCE.getEPackage();
orgomg.cwm.resource.relational.RelationalFactory.eINSTANCE.getEPackage();
orgomg.cwmmip.CwmmipFactory.eINSTANCE.getEPackage();
orgomg.mof.model.ModelFactory.eINSTANCE.getEPackage();
orgomg.cwm.foundation.datatypes.DatatypesFactory.eINSTANCE.getEPackage();
orgomg.cwm.objectmodel.core.CoreFactory.eINSTANCE.getEPackage();
orgomg.cwm.objectmodel.relationships.RelationshipsFactory.eINSTANCE.getEPackage();
orgomg.cwm.foundation.typemapping.TypemappingFactory.eINSTANCE.getEPackage();
}
/**
* Method "getExtensions".
*
* @return the list of file extensions
*/
public static List<String> getExtensions() {
List<String> extensions = new ArrayList<String>();
// --- Talend extension packages
extensions.add(SoftwaredeploymentPackage.eNAME);
extensions.add(RelationalPackage.eNAME);
// --- Talend DQ extension packages
extensions.add(IndicatorsPackage.eNAME);
extensions.add(DomainPackage.eNAME);
extensions.add(CategoryPackage.eNAME);
extensions.add(ReportsPackage.eNAME);
extensions.add(DefinitionPackage.eNAME);
// --- add specific extensions
// MOD zshen use same repository API with TOS to persistent metadata
extensions.add(ITEM_EXTENSION);
extensions.add(PROV);
extensions.add(ANA);
extensions.add(CAT);
extensions.add(REP);
extensions.add(PATTERN);
extensions.add(DQRULE);
// --- CWM generated packages
extensions.add(CorePackage.eNAME);
extensions.add(TypemappingPackage.eNAME);
// TODO scorreia add other file extensions
return extensions;
}
/**
* Method "initializeAllPackages" initializes all the EMF packages. This is needed when reading EMF files.
*/
public static void initializeAllPackages() {
// --- talend extension packages
org.talend.cwm.softwaredeployment.SoftwaredeploymentPackage.eINSTANCE.getEFactoryInstance();
// RelationalPackage.eINSTANCE.getRelationalFactory();
// --- talend DQ factories
// AnalysisPackage.eINSTANCE.getEFactoryInstance();
DomainPackage.eINSTANCE.getEFactoryInstance();
IndicatorsPackage.eINSTANCE.getEFactoryInstance();
PatternPackage.eINSTANCE.getEFactoryInstance();
CategoryPackage.eINSTANCE.getEFactoryInstance();
org.talend.dataquality.expressions.ExpressionsPackage.eINSTANCE.getEFactoryInstance();
org.talend.dataquality.reports.ReportsPackage.eINSTANCE.getEFactoryInstance();
DefinitionPackage.eINSTANCE.getEFactoryInstance();
org.talend.dataquality.properties.PropertiesPackage.eINSTANCE.getEFactoryInstance();
// CWM generated packages
// TODO scorreia add other packages
orgomg.cwm.foundation.softwaredeployment.SoftwaredeploymentPackage.eINSTANCE.getEFactoryInstance();
orgomg.cwm.resource.relational.RelationalPackage.eINSTANCE.getEFactoryInstance();
orgomg.cwmmip.CwmmipPackage.eINSTANCE.getEFactoryInstance();
orgomg.mof.model.ModelPackage.eINSTANCE.getEFactoryInstance();
orgomg.cwm.foundation.datatypes.DatatypesPackage.eINSTANCE.getEFactoryInstance();
orgomg.cwm.objectmodel.core.CorePackage.eINSTANCE.getEFactoryInstance();
orgomg.cwm.objectmodel.relationships.RelationshipsPackage.eINSTANCE.getEFactoryInstance();
orgomg.cwm.foundation.typemapping.TypemappingPackage.eINSTANCE.getEFactoryInstance();
}
/**
* DOC bZhou Comment method "isAnalysisFile".
*
* @param fileExtension
* @return
*/
public static boolean isAnalysisFile(String fileExtension) {
return StringUtils.equalsIgnoreCase(ANA, fileExtension);
}
/**
* DOC bZhou Comment method "isReportFile".
*
* @param fileExtension
* @return
*/
public static boolean isReportFile(String fileExtension) {
return StringUtils.equalsIgnoreCase(REP, fileExtension);
}
/**
* DOC bZhou Comment method "isProvFile".
*
* @param fileExtension
* @return
*/
public static boolean isProvFile(String fileExtension) {
return StringUtils.equalsIgnoreCase(PROV, fileExtension);
}
/**
* DOC bZhou Comment method "isPatternFile".
*
* @param fileExtension
* @return
*/
public static boolean isPatternFile(String fileExtension) {
return StringUtils.equalsIgnoreCase(PATTERN, fileExtension);
}
/**
* DOC bZhou Comment method "isDQRuleFile".
*
* @param fileExtension
* @return
*/
public static boolean isDQRuleFile(String fileExtension) {
return StringUtils.equalsIgnoreCase(DQRULE, fileExtension);
}
/**
* DOC bZhou Comment method "isUDIFile".
*
* @param fileExtension
* @return
*/
public static boolean isUDIFile(String fileExtension) {
return StringUtils.equalsIgnoreCase(DEFINITION, fileExtension);
}
/**
* DOC zshen Comment method "isUDIJarFile".
*
* @param fileExtension
* @return
*/
public static boolean isUDIJarFile(String fileExtension) {
return StringUtils.equalsIgnoreCase(JAR, fileExtension);
}
/**
* DOC bZhou Comment method "isSQLFile".
*
* @param fileExtension
* @return
*/
public static boolean isSQLFile(String fileExtension) {
return StringUtils.equalsIgnoreCase(SQL, fileExtension);
}
/**
* DOC bZhou Comment method "isCATFile".
*
* @param fileExtension
* @return
*/
public static boolean isCATFile(String fileExtension) {
return StringUtils.equalsIgnoreCase(CAT, fileExtension);
}
/**
* DOC bZhou Comment method "isEmfFile".
*
* @return
*/
public static boolean isEmfFile(String fileExt) {
return getExtensions().contains(fileExt);
}
/**
* DOC bZhou Comment method "isJrxmlFile".
*
* @param fileExt
* @return
*/
public static boolean isJrxmlFile(String fileExt) {
return StringUtils.equalsIgnoreCase(fileExt, JRXML);
}
public static boolean isItemFile(String fileExt) {
return StringUtils.equalsIgnoreCase(fileExt, ITEM_EXTENSION);
}
/**
*
* DOC mzhao FactoriesUtil class global comment. Detailled comment
*/
public enum EElementEName {
UNKNOWN("Unknow", ""), //$NON-NLS-1$ $NON-NLS-2$
ANALYSIS("Analysis", FactoriesUtil.ANA), //$NON-NLS-1$
REPORT("Report", FactoriesUtil.REP), //$NON-NLS-1$
PROVIDER("DataProvider", FactoriesUtil.PROV), //$NON-NLS-1$
PATTERN("Pattern", FactoriesUtil.PATTERN), //$NON-NLS-1$
RULE("Rule", FactoriesUtil.DQRULE), //$NON-NLS-1$
DEFINITION("Definition", FactoriesUtil.DEFINITION), //$NON-NLS-1$
JRXML("ReportTemplate", FactoriesUtil.JRXML), //$NON-NLS-1$
SQL("SQLFile", FactoriesUtil.SQL), //$NON-NLS-1$
ITEM("Item", FactoriesUtil.ITEM_EXTENSION), //$NON-NLS-1$
PROPERTY("Property", FactoriesUtil.PROPERTIES_EXTENSION);//$NON-NLS-1$
String name, fileExt;
EElementEName(String name, String fileExt) {
this.name = name;
this.fileExt = fileExt;
}
public String getFileExt() {
return fileExt;
}
public String getName() {
return name;
}
public static EElementEName findENameByExt(String fileExt) {
for (EElementEName eName : values()) {
if (eName.getFileExt().equalsIgnoreCase(fileExt)) {
return eName;
}
}
return UNKNOWN;
}
/**
* DOC bZhou Comment method "getElementEName".
*
* @param item
* @return
*/
public static EElementEName getElementEName(Item item) {
EElementEName elementEName = getElementENameFromTDQ(item);
if (elementEName != null) {
return elementEName;
} else {
return (EElementEName) new org.talend.core.model.properties.util.PropertiesSwitch() {
@Override
public Object caseDatabaseConnectionItem(DatabaseConnectionItem object) {
return ITEM;
}
@Override
public Object caseMDMConnectionItem(MDMConnectionItem object) {
return ITEM;
}
@Override
public Object caseDelimitedFileConnectionItem(DelimitedFileConnectionItem object) {
return ITEM;
}
}.doSwitch(item);
}
}
private static EElementEName getElementENameFromTDQ(Item item) {
return (EElementEName) new PropertiesSwitch<Object>() {
@Override
public Object caseTDQReportItem(TDQReportItem object) {
return REPORT;
}
@Override
public Object caseTDQAnalysisItem(TDQAnalysisItem object) {
return ANALYSIS;
}
@Override
public Object caseTDQBusinessRuleItem(TDQBusinessRuleItem object) {
return RULE;
}
@Override
public Object caseTDQIndicatorDefinitionItem(TDQIndicatorDefinitionItem object) {
return DEFINITION;
}
@Override
public Object caseTDQPatternItem(TDQPatternItem object) {
return PATTERN;
}
@Override
public Object caseTDQJrxmlItem(TDQJrxmlItem object) {
return JRXML;
}
@Override
public Object caseTDQSourceFileItem(TDQSourceFileItem object) {
return SQL;
}
}.doSwitch(item);
}
}
}