| /******************************************************************************* |
| * Copyright (c) 2001, 2004 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.taginfo; |
| |
| import java.util.HashMap; |
| import java.util.StringTokenizer; |
| |
| import org.eclipse.jface.preference.IPreferenceStore; |
| import org.eclipse.wst.sse.ui.internal.SSEUIPlugin; |
| import org.eclipse.wst.sse.ui.preferences.CommonEditorPreferenceNames; |
| |
| /** |
| * Manages text hovers for Structured Text editors |
| * |
| * @author amywu |
| */ |
| 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(); |
| } |
| |
| /** |
| * 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$ |
| |
| TextHoverDescriptor descriptor = new TextHoverDescriptor(id, SSEUIPlugin.getResourceString("%" + id + LABEL_KEY), SSEUIPlugin.getResourceString("%" + id + DESCRIPTION_KEY), 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 { |
| descriptors[i] = new TextHoverDescriptor(TEXT_HOVER_IDS[i], SSEUIPlugin.getResourceString("%" + TEXT_HOVER_IDS[i] + LABEL_KEY), SSEUIPlugin.getResourceString("%" + TEXT_HOVER_IDS + DESCRIPTION_KEY)); |
| } |
| } |
| 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(CommonEditorPreferenceNames.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; |
| } |
| } |