/**
 *                                                                            
 * 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.infogrid.api;

import org.eclipse.osbp.ecview.core.common.model.core.YField;
import org.eclipse.osbp.ecview.extension.grid.CxGridColumn;
import org.eclipse.osbp.infogrid.model.gridsource.CxGridProperty;

/**
 * Creates a {@link YField} as an editorfield for the given propertyType.
 * 
 * @NoImplement by clients
 * @Scope(singleton)
 */
public interface IECViewGridEditorFieldFactory {

	/**
	 * If CxGrid is editable, we need to return a proper editor field to be used
	 * in the grid editor. If <code>null</code> is returned, the
	 * {@link CxGridColumn} will be set to <code>editable=false</code>.
	 * 
	 * @param prop
	 * @param propertyType
	 * @param rootType 
	 * @return
	 */
	YField createEditorField(CxGridProperty prop, Class<?> propertyType, Class<?> rootType);

}
