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

import org.eclipse.osbp.ecview.core.common.model.core.YView;
import org.eclipse.osbp.ecview.core.common.validation.IFieldValidationManager;

import org.eclipse.osbp.ecview.extension.model.YStrategyLayout;

public interface ICommonUIHelper {

	public abstract YStrategyLayout findLayout(YView yView);

	/**
	 * Required method implementation for IFieldValidationManager.Listener
	 */
	public abstract void validationChanged(IFieldValidationManager.Event event);

	public abstract void validate(String commandId);

}
