/**
 *                                                                            
 *  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 v1.0       
 *  which accompanies this distribution, and is available at                  
 *  http://www.eclipse.org/legal/epl-v10.html                                 
 *                                                                            
 *  Contributors:                                                      
 * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
 * 
 */
package org.eclipse.osbp.xtext.datamartdsl.valueconverter;

import org.eclipse.osbp.xtext.basic.valueconverter.TRANSLATABLESTRINGValueConverter;
import org.eclipse.xtext.conversion.IValueConverter;
import org.eclipse.xtext.conversion.ValueConverter;
import org.eclipse.xtext.xbase.conversion.XbaseValueConverterService;

import com.google.inject.Inject;
import com.google.inject.Singleton;

/**
 * Adds a value conversion for the QualifiedNameWithWildCard rule.
 * 
 * @author Jan Koehnlein
 */
@SuppressWarnings("restriction")
@Singleton
public class DatamartValueConverterService extends XbaseValueConverterService {

	/** The converter. */
	@Inject
	private TRANSLATABLESTRINGValueConverter converter;

	/**
	 * Gets the qualified name with wild card.
	 *
	 * @return the qualified name with wild card
	 */
	@ValueConverter(rule = "QualifiedNameWithWildCard")
	public IValueConverter<String> getQualifiedNameWithWildCard() {
		return getQualifiedNameValueConverter();
	}

	/**
	 * Gets the translatable string value converter.
	 *
	 * @return the translatable string value converter
	 */
	@ValueConverter(rule = "TRANSLATABLESTRING")
	public IValueConverter<String> getTranslatableStringValueConverter() {
		return converter;
	}

}
