/**
 *                                                                            
 *  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:                                                      
 * 	   Florian Pirchner - Initial implementation
 * 
 */
package org.eclipse.osbp.ecview.extension.grid.presentation.clientside.client;

import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.vaadin.client.renderers.Renderer;
import com.vaadin.client.widget.grid.RendererCellReference;

/**
 * The Class QuantityRenderer.
 */
public class QuantityRenderer implements Renderer<String> {
	
	/* (non-Javadoc)
	 * @see com.vaadin.client.renderers.Renderer#render(com.vaadin.client.widget.grid.RendererCellReference, java.lang.Object)
	 */
	@Override
	public void render(RendererCellReference cell, String htmlString) {
		cell.getElement().setInnerSafeHtml(
				SafeHtmlUtils.fromSafeConstant(htmlString));
	}
}