/*=============================================================================#
 # Copyright (c) 2009, 2020 Stephan Wahlbrink and others.
 # 
 # This program and the accompanying materials are made available under the
 # terms of the Eclipse Public License 2.0 which is available at
 # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
 # which is available at https://www.apache.org/licenses/LICENSE-2.0.
 # 
 # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
 # 
 # Contributors:
 #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
 #=============================================================================*/

package org.eclipse.statet.ltk.ui.templates;

import org.eclipse.jface.text.templates.TemplateContext;
import org.eclipse.jface.text.templates.TemplateVariableResolver;

import org.eclipse.statet.internal.ltk.ui.TemplatesMessages;
import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;


public abstract class SourceUnitVariableResolver extends TemplateVariableResolver {
	
	
	public static final String FILENAME_TYPE= "file_name"; //$NON-NLS-1$
	
	
	public static class FileName extends SourceUnitVariableResolver {
		
		public FileName() {
			super(FILENAME_TYPE, TemplatesMessages.Templates_Variable_File_description);
		}
		
		@Override
		protected String resolve(final TemplateContext context) {
			final ISourceUnit su= ((IWorkbenchTemplateContext) context).getSourceUnit();
			if (su != null) {
				return su.getElementName().getDisplayName();
			}
			return null;
		}
		
	}
	
	
	protected SourceUnitVariableResolver(final String type, final String description) {
		super(type, description);
	}
	
	@Override
	protected boolean isUnambiguous(final TemplateContext context) {
		return (((IWorkbenchTemplateContext) context).getSourceUnit() != null);
	}
	
}
