// ============================================================================ // // 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 com.amalto.workbench.widgets.composites; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.text.DefaultTextHover; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.ITextHover; import org.eclipse.jface.text.presentation.IPresentationReconciler; import org.eclipse.jface.text.presentation.PresentationReconciler; import org.eclipse.jface.text.rules.DefaultDamagerRepairer; import org.eclipse.jface.text.rules.IRule; import org.eclipse.jface.text.rules.IToken; import org.eclipse.jface.text.rules.IWhitespaceDetector; import org.eclipse.jface.text.rules.IWordDetector; import org.eclipse.jface.text.rules.RuleBasedScanner; import org.eclipse.jface.text.rules.WhitespaceRule; import org.eclipse.jface.text.rules.WordRule; import org.eclipse.jface.text.source.DefaultAnnotationHover; import org.eclipse.jface.text.source.IAnnotationHover; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.jface.text.source.SourceViewerConfiguration; import com.amalto.workbench.MDMWorbenchPlugin; public class ElementFKInfoConfiguration extends SourceViewerConfiguration { public static final String PREF_COLOR_DEFAULT = "colorDefault"; //$NON-NLS-1$ public static final String PREF_COLOR_STRING = "colorString"; //$NON-NLS-1$ public static final String PREF_COLOR_KEYWORD = "colorKeyword"; //$NON-NLS-1$ private static ElementFKInfoColorProvider ecolorProvider; private List<String> KEYWORDS = new ArrayList<String>(); private KeywordPartitionScanner keywordPartitionScanner; @Override public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) { return new String[] { IDocument.DEFAULT_CONTENT_TYPE, ElementFKInfotPartitionScanner.COMMON_STRING }; } @Override public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) { return new DefaultAnnotationHover(true); } @Override public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) { return new DefaultTextHover(sourceViewer); } @Override public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) { PresentationReconciler reconciler = new PresentationReconciler(); DefaultDamagerRepairer stringDR = new DefaultDamagerRepairer(getStringScanner()); reconciler.setDamager(stringDR, ElementFKInfotPartitionScanner.COMMON_STRING); reconciler.setRepairer(stringDR, ElementFKInfotPartitionScanner.COMMON_STRING); DefaultDamagerRepairer keywordDR = new DefaultDamagerRepairer(getKeywordScanner()); reconciler.setDamager(keywordDR, IDocument.DEFAULT_CONTENT_TYPE); reconciler.setRepairer(keywordDR, IDocument.DEFAULT_CONTENT_TYPE); return reconciler; } private RuleBasedScanner getStringScanner() { RuleBasedScanner scanner = new RuleBasedScanner(); ElementFKInfoColorProvider colorProvider = getEditorColorProvider(); scanner.setDefaultReturnToken(colorProvider.getToken(PREF_COLOR_STRING)); return scanner; } private KeywordPartitionScanner getKeywordScanner() { if (keywordPartitionScanner == null) { keywordPartitionScanner = new KeywordPartitionScanner(); } return keywordPartitionScanner; } public void setFKInfos(List<String> xpaths) { this.KEYWORDS = xpaths; getKeywordScanner().initRules(); } private static ElementFKInfoColorProvider getEditorColorProvider() { if (ecolorProvider == null) { ecolorProvider = new ElementFKInfoColorProvider(MDMWorbenchPlugin.getDefault().getPreferenceStore()); } return ecolorProvider; } public class KeywordPartitionScanner extends RuleBasedScanner { public KeywordPartitionScanner() { initRules(); } public void initRules() { IToken keyword = getEditorColorProvider().getToken(PREF_COLOR_KEYWORD); IToken other = getEditorColorProvider().getToken(PREF_COLOR_DEFAULT); WordRule wordRule = new WordRule(new IWordDetector() { public boolean isWordPart(char c) { if (c == '/') { return true; } return Character.isJavaIdentifierPart(c); } public boolean isWordStart(char c) { if (c == '/') { return true; } return Character.isJavaIdentifierStart(c); } }, other); for (int i = 0; i < KEYWORDS.size(); i++) { wordRule.addWord(KEYWORDS.get(i), keyword); wordRule.addWord(KEYWORDS.get(i).toUpperCase(), keyword); } IRule[] rules = new IRule[2]; rules[0] = wordRule; rules[1] = new WhitespaceRule(new IWhitespaceDetector() { public boolean isWhitespace(char character) { return Character.isWhitespace(character); } }); setRules(rules); } } }