diff options
Diffstat (limited to 'core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/taginfo/TextHoverManager.java')
-rw-r--r-- | core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/taginfo/TextHoverManager.java | 243 |
1 files changed, 243 insertions, 0 deletions
diff --git a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/taginfo/TextHoverManager.java b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/taginfo/TextHoverManager.java new file mode 100644 index 0000000000..428b1a0209 --- /dev/null +++ b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/taginfo/TextHoverManager.java @@ -0,0 +1,243 @@ +/******************************************************************************* + * Copyright (c) 2001, 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Jens Lukowski/Innoopract - initial renaming/restructuring + * + *******************************************************************************/ +package org.eclipse.wst.sse.ui.internal.taginfo; + +import java.util.HashMap; + +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.text.ITextHover; +import org.eclipse.wst.sse.ui.internal.Logger; +import org.eclipse.wst.sse.ui.internal.SSEUIMessages; +import org.eclipse.wst.sse.ui.internal.SSEUIPlugin; +import org.eclipse.wst.sse.ui.internal.preferences.EditorPreferenceNames; + +import com.ibm.icu.util.StringTokenizer; + +/** + * Manages text hovers for Structured Text editors + */ +public class TextHoverManager { + /** + * Contains description of a text hover + */ + public class TextHoverDescriptor { + private String fDescription; + private boolean fEnabled; + private String fId; + private String fLabel; + private String fModifierString; + + /** + * @param id + * @param label + * @param desc + */ + public TextHoverDescriptor(String id, String label, String desc) { + fId = id; + fLabel = label; + fDescription = desc; + } + + /** + * @param id + * @param label + * @param desc + * @param enabled + * @param modifierString + */ + public TextHoverDescriptor(String id, String label, String desc, boolean enabled, String modifierString) { + fId = id; + fLabel = label; + fDescription = desc; + fEnabled = enabled; + fModifierString = modifierString; + } + + /** + * @return Returns the fDescription. + */ + public String getDescription() { + return fDescription; + } + + /** + * @return Returns the fId. + */ + public String getId() { + return fId; + } + + /** + * @return Returns the fLabel + */ + public String getLabel() { + return fLabel; + } + + /** + * @return Returns the fModifierString. + */ + public String getModifierString() { + return fModifierString; + } + + /** + * @return Returns the fEnabled. + */ + public boolean isEnabled() { + return fEnabled; + } + + /** + * @param enabled + * The fEnabled to set. + */ + public void setEnabled(boolean enabled) { + fEnabled = enabled; + } + + /** + * @param modifierString + * The fModifierString to set. + */ + public void setModifierString(String modifierString) { + fModifierString = modifierString; + } + } + + public static final String ANNOTATION_HOVER = "annotationHover"; //$NON-NLS-1$ + + // list of different types of Source editor hovers + public static final String COMBINATION_HOVER = "combinationHover"; //$NON-NLS-1$ + // hover descriptions are in .properties file with the key in the form of + // "[id]_desc" + private static final String DESCRIPTION_KEY = "_desc"; //$NON-NLS-1$ + public static final String DOCUMENTATION_HOVER = "documentationHover"; //$NON-NLS-1$ + public static final String HOVER_ATTRIBUTE_SEPARATOR = "|"; //$NON-NLS-1$ + public static final String HOVER_SEPARATOR = ";"; //$NON-NLS-1$ + + // hover labels are in .properties file with the key in the form of + // "[id]_label" + private static final String LABEL_KEY = "_label"; //$NON-NLS-1$ + + public static final String NO_MODIFIER = "0"; //$NON-NLS-1$ + public static final String PROBLEM_HOVER = "problemHover"; //$NON-NLS-1$ + public static final String[] TEXT_HOVER_IDS = new String[]{COMBINATION_HOVER, PROBLEM_HOVER, DOCUMENTATION_HOVER, ANNOTATION_HOVER}; + /** + * Current list of Structured Text editor text hovers + */ + private TextHoverDescriptor[] fTextHovers; + + public TextHoverManager() { + super(); + } + + /** + * Create a best match hover with the give text hover as the documentation + * hover + * + * @param infoHover + * @return ITextHover + * @deprecated as of WTP 3.0 M3 + */ + public ITextHover createBestMatchHover(ITextHover infoHover) { + return new BestMatchHover(infoHover); + } + + /** + * Generate a list of text hover descriptors from the given delimited + * string + * + * @param textHoverStrings + * @return + */ + public TextHoverDescriptor[] generateTextHoverDescriptors(String textHoverStrings) { + StringTokenizer st = new StringTokenizer(textHoverStrings, HOVER_SEPARATOR); + + // read from preference and load id-descriptor mapping to a hash table + HashMap idToModifier = new HashMap(st.countTokens()); + while (st.hasMoreTokens()) { + String textHoverString = st.nextToken(); + StringTokenizer st2 = new StringTokenizer(textHoverString, HOVER_ATTRIBUTE_SEPARATOR); + if (st2.countTokens() == 3) { + String id = st2.nextToken(); + boolean enabled = Boolean.valueOf(st2.nextToken()).booleanValue(); + String modifierString = st2.nextToken(); + if (modifierString.equals(NO_MODIFIER)) + modifierString = ""; //$NON-NLS-1$ + + String label = null; + String description = null; + try { + label = SSEUIMessages.getResourceBundle().getString(id + LABEL_KEY); + description = SSEUIMessages.getResourceBundle().getString(id + DESCRIPTION_KEY); + } + catch (Exception e) { + Logger.log(Logger.WARNING_DEBUG, e.getMessage(), e); + } + TextHoverDescriptor descriptor = new TextHoverDescriptor(id, label, description, enabled, modifierString); + // should check to see if ids appear more than once + idToModifier.put(id, descriptor); + } + } + + // go through all defined text hovers and match with their preference + TextHoverDescriptor[] descriptors = new TextHoverDescriptor[TEXT_HOVER_IDS.length]; + for (int i = 0; i < TEXT_HOVER_IDS.length; i++) { + TextHoverDescriptor desc = (TextHoverDescriptor) idToModifier.get(TEXT_HOVER_IDS[i]); + if (desc != null) { + descriptors[i] = desc; + } + else { + String label = null; + String description = null; + try { + label = SSEUIMessages.getResourceBundle().getString(TEXT_HOVER_IDS[i] + LABEL_KEY); + description = SSEUIMessages.getResourceBundle().getString(TEXT_HOVER_IDS[i] + DESCRIPTION_KEY); + } + catch (Exception e) { + Logger.log(Logger.WARNING_DEBUG, e.getMessage(), e); + } + descriptors[i] = new TextHoverDescriptor(TEXT_HOVER_IDS[i], label, description); + } + } + return descriptors; + } + + private IPreferenceStore getPreferenceStore() { + return SSEUIPlugin.getDefault().getPreferenceStore(); + } + + + /** + * Returns the text hovers for Structured Text editor. If fTextHover has + * not been initialied, it will be initialized. + * + * @return Returns the fTextHovers. + */ + public TextHoverDescriptor[] getTextHovers() { + if (fTextHovers == null) { + String textHoverStrings = getPreferenceStore().getString(EditorPreferenceNames.EDITOR_TEXT_HOVER_MODIFIERS); + fTextHovers = generateTextHoverDescriptors(textHoverStrings); + } + return fTextHovers; + } + + /** + * Sets fTextHovers to null so that next time getTextHovers is called, + * fTextHovers will be populated with the latest preferences. + */ + public void resetTextHovers() { + fTextHovers = null; + } +} |