/**
 * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), 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:
 *         Florian Pirchner - Initial implementation
 */
package org.eclipse.osbp.ecview.semantic.uisemantics;

import org.eclipse.emf.ecore.EFactory;

/**
 * <!-- begin-user-doc -->
 * The <b>Factory</b> for the model.
 * It provides a create method for each non-abstract class of the model.
 * <!-- end-user-doc -->
 * @see org.eclipse.osbp.ecview.semantic.uisemantics.UiSemanticsPackage
 * @generated
 */
public interface UiSemanticsFactory extends EFactory {
	/**
	 * The singleton instance of the factory.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	UiSemanticsFactory eINSTANCE = org.eclipse.osbp.ecview.semantic.uisemantics.impl.UiSemanticsFactoryImpl.init();

	/**
	 * Returns a new object of class '<em>Ux Model</em>'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return a new object of class '<em>Ux Model</em>'.
	 * @generated
	 */
	UxModel createUxModel();

	/**
	 * Returns a new object of class '<em>Ux EPackage Import</em>'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return a new object of class '<em>Ux EPackage Import</em>'.
	 * @generated
	 */
	UxEPackageImport createUxEPackageImport();

	/**
	 * Returns a new object of class '<em>Ux Element Definition</em>'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return a new object of class '<em>Ux Element Definition</em>'.
	 * @generated
	 */
	UxElementDefinition createUxElementDefinition();

	/**
	 * Returns a new object of class '<em>Ux Element URI</em>'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return a new object of class '<em>Ux Element URI</em>'.
	 * @generated
	 */
	UxElementURI createUxElementURI();

	/**
	 * Returns a new object of class '<em>Ux Available Bindings</em>'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return a new object of class '<em>Ux Available Bindings</em>'.
	 * @generated
	 */
	UxAvailableBindings createUxAvailableBindings();

	/**
	 * Returns a new object of class '<em>Ux Available Visibility Options</em>'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return a new object of class '<em>Ux Available Visibility Options</em>'.
	 * @generated
	 */
	UxAvailableVisibilityOptions createUxAvailableVisibilityOptions();

	/**
	 * Returns a new object of class '<em>Ux Value Binding Endpoint Def</em>'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return a new object of class '<em>Ux Value Binding Endpoint Def</em>'.
	 * @generated
	 */
	UxValueBindingEndpointDef createUxValueBindingEndpointDef();

	/**
	 * Returns a new object of class '<em>Ux Available Validator Properties</em>'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return a new object of class '<em>Ux Available Validator Properties</em>'.
	 * @generated
	 */
	UxAvailableValidatorProperties createUxAvailableValidatorProperties();

	/**
	 * Returns a new object of class '<em>Ux Validator Property</em>'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return a new object of class '<em>Ux Validator Property</em>'.
	 * @generated
	 */
	UxValidatorProperty createUxValidatorProperty();

	/**
	 * Returns a new object of class '<em>Ux Bindingable Option</em>'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return a new object of class '<em>Ux Bindingable Option</em>'.
	 * @generated
	 */
	UxBindingableOption createUxBindingableOption();

	/**
	 * Returns a new object of class '<em>Ux Visibleable Option</em>'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return a new object of class '<em>Ux Visibleable Option</em>'.
	 * @generated
	 */
	UxVisibleableOption createUxVisibleableOption();

	/**
	 * Returns a new object of class '<em>Ux Action</em>'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return a new object of class '<em>Ux Action</em>'.
	 * @generated
	 */
	UxAction createUxAction();

	/**
	 * Returns a new object of class '<em>Ux View Category</em>'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return a new object of class '<em>Ux View Category</em>'.
	 * @generated
	 */
	UxViewCategory createUxViewCategory();

	/**
	 * Returns a new object of class '<em>Ux Import Section Declaration</em>'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return a new object of class '<em>Ux Import Section Declaration</em>'.
	 * @generated
	 */
	UxImportSectionDeclaration createUxImportSectionDeclaration();

	/**
	 * Returns the package supported by this factory.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return the package supported by this factory.
	 * @generated
	 */
	UiSemanticsPackage getUiSemanticsPackage();

} //UiSemanticsFactory
