/*******************************************************************************
 * Copyright (c) 2016 Red Hat Inc. 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:
 * - Mickael Istria (Red Hat Inc.)
 *******************************************************************************/
package org.eclipse.ui.internal.genericeditor;

import org.eclipse.jface.text.DefaultTextHover;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextHover;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.source.Annotation;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.ui.editors.text.EditorsUI;
import org.eclipse.ui.texteditor.AnnotationPreference;

/**
 * Delegate to {@link DefaultTextHover}, since we need a parameter-less
 * constructor.
 */
public class AnnotationHoverDelegate implements ITextHover {
	
	private DefaultTextHover delegate;
	private ISourceViewer viewer;

	private DefaultTextHover getDelegate(ISourceViewer sourceViewer) {
		if (this.delegate == null || this.viewer != sourceViewer) {
			this.delegate = new DefaultTextHover(sourceViewer) {
				@Override
				protected boolean isIncluded(Annotation annotation) {
					AnnotationPreference preference= EditorsUI.getAnnotationPreferenceLookup().getAnnotationPreference(annotation);
					if (preference == null)
						return false;
					String key= preference.getTextPreferenceKey();
					if (key != null) {
						if (!EditorsUI.getPreferenceStore().getBoolean(key))
							return false;
					} else {
						key= preference.getHighlightPreferenceKey();
						if (key == null || !EditorsUI.getPreferenceStore().getBoolean(key))
							return false;
					}
					return true;
				}
			};
			this.viewer = sourceViewer;
		}
		return this.delegate;
	}

	@Deprecated
	@Override
	public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
		if (textViewer instanceof ISourceViewer) {
			return getDelegate((ISourceViewer)textViewer).getHoverInfo(textViewer, hoverRegion);
		}
		return null;
	}

	@Override
	public IRegion getHoverRegion(ITextViewer textViewer, int offset) {
		if (textViewer instanceof ISourceViewer) {
			return getDelegate((ISourceViewer)textViewer).getHoverRegion(textViewer, offset);
		}
		return null;
	}


}
