/**
 *                                                                            
 *  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.datainterchange.valueconverter;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.osbp.xtext.datainterchange.DataInterchange;
import org.eclipse.osbp.xtext.datainterchange.DataInterchangeGroup;
import org.eclipse.xtext.naming.IQualifiedNameConverter;
import org.eclipse.xtext.naming.QualifiedName;
import org.eclipse.xtext.xbase.scoping.XbaseQualifiedNameProvider;

import com.google.inject.Inject;

public class DataDSLQualifiedNameProvider extends XbaseQualifiedNameProvider {

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

	@Override
	public QualifiedName getFullyQualifiedName(EObject obj) {
		if (obj == null) {
			return QualifiedName.create("");
		}
		else if (obj instanceof DataInterchangeGroup) {
			DataInterchangeGroup group = (DataInterchangeGroup) obj;
			if (group.getName() == null) {
				return null;
			}
			return qualifiedNameConverter.toQualifiedName(group.getName());
		}
		else if (obj instanceof DataInterchange) {
			DataInterchange di = (DataInterchange) obj;
			if (di.getName() == null) {
				return null;
			}
			return qualifiedNameConverter.toQualifiedName(di.getName());
		}
		return super.getFullyQualifiedName(obj);
	}

}
