/**
 *                                                                            
 *  Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) 
 *                                                                            
 *  All rights reserved. This program and the accompanying materials           
 *  are made available under the terms of the Eclipse Public License 2.0        
 *  which accompanies this distribution, and is available at                  
 *  https://www.eclipse.org/legal/epl-2.0/                                 
 *                                 
 *  SPDX-License-Identifier: EPL-2.0                                 
 *                                                                            
 *  Contributors:                                                      
 * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
 * 
 */
package org.eclipse.osbp.xtext.datamartdsl.valueconverter;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.osbp.dsl.entity.xtext.extensions.ModelExtensions;
import org.eclipse.osbp.dsl.semantic.common.types.LFeature;
import org.eclipse.osbp.dsl.semantic.common.types.LPackage;
import org.eclipse.osbp.dsl.semantic.common.types.LType;
import org.eclipse.xtext.naming.IQualifiedNameConverter;
import org.eclipse.xtext.naming.QualifiedName;
import org.eclipse.xtext.xbase.scoping.XbaseQualifiedNameProvider;

import com.google.inject.Inject;

/**
 * The Class DatamartQualifiedNameProvider.
 */
@SuppressWarnings("restriction")
public class DatamartQualifiedNameProvider extends XbaseQualifiedNameProvider {

	/** The qualified name converter. */
	@Inject
	private IQualifiedNameConverter qualifiedNameConverter;

	/** The extensions. */
	@Inject
	private ModelExtensions extensions;

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.eclipse.xtext.xbase.scoping.XbaseQualifiedNameProvider#
	 * getFullyQualifiedName(org.eclipse.emf.ecore.EObject)
	 */
	@Override
	public QualifiedName getFullyQualifiedName(EObject obj) {
		if (obj == null) {
			return QualifiedName.create("");
		}
		return super.getFullyQualifiedName(obj);
	}

	/**
	 * Gets the fqn.
	 *
	 * @param lfeature
	 *            the lfeature
	 * @return the fqn
	 */
	public QualifiedName getFQN(LFeature lfeature) {
		if (lfeature.getName() == null) {
			return QualifiedName.create("");
		}
		LType type = (LType) lfeature.eContainer();
		LPackage pkg = extensions.getPackage(type);
		if (pkg != null && type != null) {
			final String qualifiedName = String.format("%s.%s.%s", pkg.getName(), type.getName(), lfeature.getName());
			if (qualifiedName == null)
				return null;
			return qualifiedNameConverter.toQualifiedName(qualifiedName);
		} else {
			return lfeature.getName() != null ? qualifiedNameConverter.toQualifiedName(lfeature.getName()) : null;
		}
	}

}
