/**
 *                                                                            
 * 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.authorizationdsl.ui;

import org.eclipse.osbp.xtext.basic.ui.BasicDSLDocumentationTranslator;
import org.eclipse.osbp.xtext.basic.ui.BasicDSLEObjectHoverDocumentationProvider;

public class AuthorizationDSLEObjectHoverDocumentationProvider extends BasicDSLEObjectHoverDocumentationProvider {
	 
    private static AuthorizationDSLEObjectHoverDocumentationProvider INSTANCE;

    public static AuthorizationDSLEObjectHoverDocumentationProvider instance() {
        return INSTANCE;
    }

    public AuthorizationDSLEObjectHoverDocumentationProvider() {
        super();
        INSTANCE = this;
    }
    
    @Override
    protected BasicDSLDocumentationTranslator getTranslator() {
        return AuthorizationDSLUiDocumentationTranslator.instance();
    }
}
