// ============================================================================ // // 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.resource; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.QualifiedName; import org.talend.commons.emf.FactoriesUtil; import org.talend.core.model.metadata.builder.connection.DatabaseConnection; import org.talend.core.model.properties.DatabaseConnectionItem; import org.talend.core.model.properties.DelimitedFileConnectionItem; import org.talend.core.model.properties.FolderItem; import org.talend.core.model.properties.Item; import org.talend.core.model.properties.MDMConnectionItem; import org.talend.core.model.properties.TDQItem; import org.talend.cwm.helper.SwitchHelpers; import org.talend.dataquality.analysis.Analysis; import org.talend.dataquality.domain.pattern.ExpressionType; import org.talend.dataquality.domain.pattern.Pattern; import org.talend.dataquality.helpers.DomainHelper; import org.talend.dataquality.indicators.definition.IndicatorDefinition; import org.talend.dataquality.indicators.definition.IndicatorsDefinitions; 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.TDQMatchRuleItem; 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.rules.DQRule; import org.talend.dataquality.rules.MatchRuleDefinition; import org.talend.dataquality.rules.ParserRule; import org.talend.dataquality.rules.WhereRule; import orgomg.cwm.foundation.softwaredeployment.DataProvider; import orgomg.cwm.objectmodel.core.ModelElement; import orgomg.cwmx.analysis.informationreporting.Report; /** * DOC bZhou class global comment. Detailled comment */ public enum EResourceConstant { // These three resource constant is compatible with version before 4.1. OLD_METADATA("TDQ_Metadata", "TDQ_Metadata", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ OLD_DB_CONNECTIONS("DB Connections", "TDQ_Metadata/DB Connections", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ OLD_MDM_CONNECTIONS("MDM Connections", "TDQ_Metadata/MDM Connections", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ FOLDER("", ""), //$NON-NLS-1$ $NON-NLS-2$ DATA_PROFILING("TDQ_Data Profiling", "TDQ_Data Profiling", ResourceConstant.READONLY, ResourceConstant.NO_SUBFOLDER), //$NON-NLS-1$ $NON-NLS-2$ LIBRARIES("TDQ_Libraries", "TDQ_Libraries", ResourceConstant.READONLY, ResourceConstant.NO_SUBFOLDER), //$NON-NLS-1$ $NON-NLS-2$ METADATA("metadata", "metadata", ResourceConstant.READONLY, ResourceConstant.NO_SUBFOLDER), //$NON-NLS-1$ $NON-NLS-2$ ANALYSIS("Analyses", "TDQ_Data Profiling/Analyses", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ TEMP_MAPDB(".Work_MapDB", ".Work_MapDB", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ REPORTS("Reports", "TDQ_Data Profiling/Reports", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ EXCHANGE("Exchange", "TDQ_Libraries/Exchange", ResourceConstant.READONLY, ResourceConstant.NO_SUBFOLDER), //$NON-NLS-1$ $NON-NLS-2$ INDICATORS("Indicators", "TDQ_Libraries/Indicators", ResourceConstant.READONLY, ResourceConstant.NO_SUBFOLDER), //$NON-NLS-1$ $NON-NLS-2$ USER_DEFINED_INDICATORS("User Defined Indicators",//$NON-NLS-1$ "TDQ_Libraries/Indicators/User Defined Indicators",//$NON-NLS-1$ ResourceConstant.READONLY), // MOD zhsne 18724: Java UDI enhancements add lib folder under UDI folder. USER_DEFINED_INDICATORS_LIB("lib", "TDQ_Libraries/Indicators/User Defined Indicators/lib", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ SYSTEM_INDICATORS("System Indicators", "TDQ_Libraries/Indicators/System Indicators", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ SYSTEM_INDICATORS_ADVANCED_STATISTICS("Advanced Statistics",//$NON-NLS-1$ "TDQ_Libraries/Indicators/System Indicators/Advanced Statistics",//$NON-NLS-1$ ResourceConstant.READONLY), SYSTEM_INDICATORS_BUSINESS_RULES("Business Rules",//$NON-NLS-1$ "TDQ_Libraries/Indicators/System Indicators/Business Rules",//$NON-NLS-1$ ResourceConstant.READONLY), SYSTEM_INDICATORS_CORRELATION("Correlation",//$NON-NLS-1$ "TDQ_Libraries/Indicators/System Indicators/Correlation",//$NON-NLS-1$ ResourceConstant.READONLY), SYSTEM_INDICATORS_FUNCTIONAL_DEPENDENCY("Functional Dependency",//$NON-NLS-1$ "TDQ_Libraries/Indicators/System Indicators/Functional Dependency",//$NON-NLS-1$ ResourceConstant.READONLY), SYSTEM_INDICATORS_OVERVIEW("Overview", "TDQ_Libraries/Indicators/System Indicators/Overview", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ SYSTEM_INDICATORS_PATTERN_FREQUENCY_STATISTICS("Pattern Frequency Statistics",//$NON-NLS-1$ "TDQ_Libraries/Indicators/System Indicators/Pattern Frequency Statistics",//$NON-NLS-1$ ResourceConstant.READONLY), SYSTEM_INDICATORS_PATTERN_MATCHING("Pattern Matching",//$NON-NLS-1$ "TDQ_Libraries/Indicators/System Indicators/Pattern Matching",//$NON-NLS-1$ ResourceConstant.READONLY), SYSTEM_INDICATORS_ROW_COMPARISON("Row Comparison",//$NON-NLS-1$ "TDQ_Libraries/Indicators/System Indicators/Row Comparison",//$NON-NLS-1$ ResourceConstant.READONLY), SYSTEM_INDICATORS_SIMPLE_STATISTICS("Simple Statistics",//$NON-NLS-1$ "TDQ_Libraries/Indicators/System Indicators/Simple Statistics",//$NON-NLS-1$ ResourceConstant.READONLY), SYSTEM_INDICATORS_SOUNDEX("Soundex", "TDQ_Libraries/Indicators/System Indicators/Soundex", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ SYSTEM_INDICATORS_SUMMARY_STATISTICS("Summary Statistics",//$NON-NLS-1$ "TDQ_Libraries/Indicators/System Indicators/Summary Statistics",//$NON-NLS-1$ ResourceConstant.READONLY), SYSTEM_INDICATORS_TEXT_STATISTICS("Text Statistics",//$NON-NLS-1$ "TDQ_Libraries/Indicators/System Indicators/Text Statistics",//$NON-NLS-1$ ResourceConstant.READONLY), SYSTEM_INDICATORS_PHONENUMBER_STATISTICS("Phone Number Statistics",//$NON-NLS-1$ "TDQ_Libraries/Indicators/System Indicators/Phone Number Statistics",//$NON-NLS-1$ ResourceConstant.READONLY), SYSTEM_INDICATORS_FRAUDDETECTION("Fraud Detection",//$NON-NLS-1$ "TDQ_Libraries/Indicators/System Indicators/Fraud Detection", ResourceConstant.READONLY), //$NON-NLS-1$ JRXML_TEMPLATE("JRXML Template", "TDQ_Libraries/JRXML Template", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ PATTERNS("Patterns", "TDQ_Libraries/Patterns", ResourceConstant.READONLY, ResourceConstant.NO_SUBFOLDER), //$NON-NLS-1$ $NON-NLS-2$ PATTERN_REGEX("Regex", "TDQ_Libraries/Patterns/Regex", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ PATTERN_SQL("SQL", "TDQ_Libraries/Patterns/SQL", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ RULES("Rules", "TDQ_Libraries/Rules", ResourceConstant.READONLY, ResourceConstant.NO_SUBFOLDER), //$NON-NLS-1$ $NON-NLS-2$ RULES_SQL("SQL", "TDQ_Libraries/Rules/SQL", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ RULES_MATCHER("Match", "TDQ_Libraries/Rules/Match", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ RULES_PARSER("Parser", "TDQ_Libraries/Rules/Parser", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ SOURCE_FILES("Source Files", "TDQ_Libraries/Source Files", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ DB_CONNECTIONS("connections", "metadata/connections", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ MDM_CONNECTIONS("MDMconnections", "metadata/MDMconnections", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ FILEDELIMITED("fileDelimited", "metadata/fileDelimited", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ REPORTING_DB("TDQ_reporting_db", "REPORTING_DB", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ HADOOP_CLUSTER("hadoopcluster", "metadata/hadoop/hadoopcluster", ResourceConstant.READONLY), //$NON-NLS-1$ $NON-NLS-2$ REFERENCED_PROJECT("Referenced project", "Referenced project", ResourceConstant.READONLY); //$NON-NLS-1$ $NON-NLS-2$ private String name; private String path; private QualifiedName[] qualifications; EResourceConstant(String name, String path, QualifiedName... qualifications) { this.name = name; this.path = path; this.qualifications = qualifications; } /** * Getter for name. * * @return the name */ public String getName() { return name; } /** * Getter for path. * * @return the path */ public String getPath() { return path; } /** * Getter for qualifications. * * @return the qualifications */ public QualifiedName[] getQualifications() { return qualifications; } /** * DOC bzhou Comment method "getPathes". * * @return */ public static IPath[] getPathes() { List<IPath> allPathes = new ArrayList<IPath>(); for (EResourceConstant constant : values()) { if (constant != FOLDER) { allPathes.add(new Path(constant.getPath())); } } return allPathes.toArray(new Path[allPathes.size()]); } /** * * This method is to find the matched Qualifications constant by path. * * @param path * @return */ public static QualifiedName[] findQualificationsByPath(String path) { for (EResourceConstant constant : values()) { if (StringUtils.equals(path, constant.getPath())) { return constant.getQualifications(); } } return null; } /** * DOC bZhou Comment method "getTypedConstantList". * * @return */ public static List<EResourceConstant> getTypedConstantList() { List<EResourceConstant> constantList = new ArrayList<EResourceConstant>(); constantList.add(ANALYSIS); constantList.add(REPORTS); constantList.add(DB_CONNECTIONS); // constantList.add(MDM_CONNECTIONS); constantList.add(RULES_SQL); constantList.add(INDICATORS); constantList.add(JRXML_TEMPLATE); constantList.add(PATTERNS); constantList.add(SOURCE_FILES); return constantList; } /** * DOC bZhou Comment method "getTypedConstant". * * @param element * @return */ public static EResourceConstant getTypedConstant(ModelElement element) { EResourceConstant constatnt = null; if (element instanceof Analysis) { constatnt = ANALYSIS; } else if (element instanceof Report) { constatnt = REPORTS; } else if (element instanceof IndicatorDefinition) { if (element instanceof WhereRule) { constatnt = RULES_SQL; } else if (element instanceof MatchRuleDefinition) { constatnt = RULES_MATCHER; } else if (element instanceof ParserRule) { constatnt = RULES_PARSER; } else { constatnt = USER_DEFINED_INDICATORS; } } else if (element instanceof IndicatorsDefinitions) { constatnt = LIBRARIES; } else if (element instanceof Pattern) { Pattern pattern = (Pattern) element; String expressionType = DomainHelper.getExpressionType(pattern); boolean isSQLPattern = (ExpressionType.SQL_LIKE.getLiteral().equals(expressionType)); if (isSQLPattern) { constatnt = PATTERN_SQL; } else { constatnt = PATTERN_REGEX; } } else if (element instanceof DatabaseConnection) { constatnt = DB_CONNECTIONS; } return constatnt; } /** * DOC bZhou Comment method "getTypedConstant". * * @param item * @return */ public static EResourceConstant getTypedConstant(Item item) { Object object = new org.talend.core.model.properties.util.PropertiesSwitch() { @Override public Object caseDatabaseConnectionItem(DatabaseConnectionItem object) { return DB_CONNECTIONS; } @Override public Object caseMDMConnectionItem(MDMConnectionItem object) { return MDM_CONNECTIONS; } @Override public Object caseFolderItem(FolderItem object) { return FOLDER; } @Override public Object caseDelimitedFileConnectionItem(DelimitedFileConnectionItem object) { return FILEDELIMITED; } }.doSwitch(item); if (object == null) { object = new PropertiesSwitch<Object>() { @Override public Object caseTDQReportItem(TDQReportItem object) { return REPORTS; } @Override public Object caseTDQAnalysisItem(TDQAnalysisItem object) { return ANALYSIS; } @Override public Object caseTDQBusinessRuleItem(TDQBusinessRuleItem object) { DQRule rule = object.getDqrule(); if (rule != null && rule instanceof ParserRule) { // dqrule return RULES_PARSER; } return RULES_SQL; } @Override public Object caseTDQIndicatorDefinitionItem(TDQIndicatorDefinitionItem object) { return INDICATORS; } @Override public Object caseTDQPatternItem(TDQPatternItem object) { return PATTERNS; } @Override public Object caseTDQJrxmlItem(TDQJrxmlItem object) { return JRXML_TEMPLATE; } @Override public Object caseTDQSourceFileItem(TDQSourceFileItem object) { return SOURCE_FILES; } /* * (non-Javadoc) * * @see * org.talend.dataquality.properties.util.PropertiesSwitch#caseTDQMatchRuleItem(org.talend.dataquality * .properties.TDQMatchRuleItem) */ @Override public Object caseTDQMatchRuleItem(TDQMatchRuleItem object) { return RULES_MATCHER; } }.doSwitch(item); } if (object == null && item instanceof TDQItem) { final String filename = ((TDQItem) item).getFilename(); EResourceConstant constatnt = null; if (filename != null) { if (filename.endsWith(FactoriesUtil.ANA)) { constatnt = ANALYSIS; } else if (filename.endsWith(FactoriesUtil.REP)) { constatnt = REPORTS; } else if (filename.endsWith(FactoriesUtil.DQRULE)) { constatnt = RULES_SQL; } else if (filename.endsWith(FactoriesUtil.DEFINITION)) { constatnt = INDICATORS; } else if (filename.endsWith(FactoriesUtil.JRXML)) { constatnt = JRXML_TEMPLATE; } else if (filename.endsWith(FactoriesUtil.PATTERN)) { constatnt = PATTERNS; } else if (filename.endsWith(FactoriesUtil.SQL)) { constatnt = SOURCE_FILES; } } object = constatnt; } return object != null ? (EResourceConstant) object : null; } /** * DOC bZhou Comment method "isMDMConnection". * * @param provider * @return */ @SuppressWarnings("unused") private static boolean isMDMConnection(DataProvider provider) { return SwitchHelpers.MDMCONNECTION_SWITCH.doSwitch(provider) == null ? false : true; } /** * * This mehtod is to get the top level folder constant of TOP. * * @return An array of EResourceConstant. */ public static EResourceConstant[] getTopConstants() { return new EResourceConstant[] { DATA_PROFILING, LIBRARIES, METADATA }; } /** * DOC bZhou Comment method "getTopConstantIndexFromPath". * * @param inputPath * @return */ public static int getTopConstantIndexFromPath(IPath inputPath) { int constantIndex = 0; for (int i = 0; i < inputPath.segmentCount(); i++) { String segment = inputPath.segment(i); for (EResourceConstant topConstant : EResourceConstant.getTopConstants()) { if (topConstant.getPath().equals(segment)) { constantIndex = i; break; } } if (constantIndex != 0) { break; } } return constantIndex; } /** * * This method is to see whether the path is a current workspace constant path. * * @param path * @return true if it is, otherwise false. */ public static boolean isConstantPath(IPath path) { if (path != null) { for (IPath tmp : getPathes()) { if (tmp.equals(path)) { return true; } } } return false; } }