// ============================================================================ // // Copyright (C) 2006-2012 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.core.utils; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.eclipse.core.runtime.Platform; import org.talend.commons.ui.swt.colorstyledtext.jedit.KeywordMap; import org.talend.commons.ui.swt.colorstyledtext.jedit.Mode; import org.talend.commons.ui.swt.colorstyledtext.jedit.Modes; import org.talend.commons.xml.XmlUtil; import org.talend.core.language.ECodeLanguage; import org.talend.core.language.LanguageManager; /** * DOC hcw class global comment. Detailled comment */ public class KeywordsValidator { private static Map<ECodeLanguage, Set<String>> keywords = new HashMap<ECodeLanguage, Set<String>>(); private static Set<String> sqlKeywords = new HashSet<String>(); private static KeywordMap tsqlKeyWords; static { if (!Platform.getOS().equals(Platform.OS_AIX)) { Mode mode = Modes.getMode("tsql.xml"); //$NON-NLS-1$ tsqlKeyWords = mode.getDefaultRuleSet().getKeywords(); } } public static boolean isKeyword(String word) { return isKeyword(LanguageManager.getCurrentLanguage(), word); } public static boolean isKeyword(ECodeLanguage lang, String word) { Set<String> words = getKeywords(lang); // added by nma, for AIX commandline NPE, 7950. if (words == null) return false; if (word == null) { return false; } if (word.equalsIgnoreCase("class")) { //$NON-NLS-1$ return true; } if (word.equalsIgnoreCase("org")) { //$NON-NLS-1$ return true; } return words.contains(word); } public static Set<String> getKeywords(ECodeLanguage lang) { // added by nma, for AIX commandline, 7950. if (Platform.getOS().equals(Platform.OS_AIX)) { return null; } Set<String> words = keywords.get(lang); if (words == null) { words = new HashSet<String>(); Mode mode = Modes.getMode(lang.getName() + XmlUtil.FILE_XML_SUFFIX); KeywordMap keywordMap = mode.getDefaultRuleSet().getKeywords(); words.addAll(Arrays.asList(keywordMap.get("KEYWORD1"))); //$NON-NLS-1$ words.addAll(Arrays.asList(keywordMap.get("KEYWORD2"))); //$NON-NLS-1$ words.addAll(Arrays.asList(keywordMap.get("KEYWORD3"))); //$NON-NLS-1$ words.addAll(Arrays.asList(keywordMap.get("LITERAL2"))); //$NON-NLS-1$ words.addAll(Arrays.asList(keywordMap.get("INVALID"))); //$NON-NLS-1$ keywords.put(lang, words); } return words; } // hshen public static boolean isSqlKeyword(String word) { return isSqlKeyword(word, null); } /** * DOC zli Comment method "isSqlKeyword". * * @param word * @param isOracle * @return */ public static boolean isSqlKeyword(String word, String product) { // added by nma, for AIX commandline NPE, 7950. if (Platform.getOS().equals(Platform.OS_AIX)) { return false; } List<String> productKeywords = null; if (sqlKeywords.isEmpty() && tsqlKeyWords != null) { sqlKeywords.addAll(Arrays.asList(tsqlKeyWords.get("KEYWORD1"))); //$NON-NLS-1$ sqlKeywords.addAll(Arrays.asList(tsqlKeyWords.get("KEYWORD2"))); //$NON-NLS-1$ sqlKeywords.addAll(Arrays.asList(tsqlKeyWords.get("KEYWORD3"))); //$NON-NLS-1$ } if (product != null && tsqlKeyWords != null) { String[] tmp = tsqlKeyWords.get(product); if (tmp != null) { productKeywords = Arrays.asList(tmp); } } if (word != null) { boolean contains = sqlKeywords.contains(word.toUpperCase()); if (!contains && productKeywords != null) { return productKeywords.contains(word); } return contains; } return true; } public static void main(String[] args) { System.out.println(isKeyword(ECodeLanguage.JAVA, "class")); //$NON-NLS-1$ } }