/**
 *                                                                            
 *  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.messagedsl.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 MessageValueConverterService 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;
	}

}
