/**
 *  Copyright (c) 2011, 2015 Mia-Software.
 *  
 *  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:
 *     Grégoire Dupé (Mia-Software) - Design
 *     Nicolas Guyomar (Mia-Software) - Implementation
 *     Emmanuelle Rouillé (Mia-Software) - Bug 352618 - To be able to use non-derived facet structural features and save their values.
 *     Nicolas Bros (Mia-Software) - Bug 370110 - Rename efacetcatalog2.ecore
 *     Grégoire Dupé (Mia-Software) - Bug 361817 - [Restructuring] Dynamic load to the facet catalog
 *     Grégoire Dupé (Mia-Software) - Bug 477657 - The catalog manager should be able to manage workspace model
 */
package org.eclipse.emf.facet.efacet.metamodel.v0_2_0.efacetcatalog;

import org.eclipse.emf.common.util.EList;

import org.eclipse.emf.facet.efacet.metamodel.v0_2_0.efacet.FacetSet;

import org.eclipse.emf.facet.util.emf.catalog.Catalog;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Facet Set Catalog</b></em>'.
 * <!-- end-user-doc -->
 *
 * <!-- begin-model-doc -->
 * A FacetSetCatalog aims at referencing EMF Facet FacetSet.
 * <!-- end-model-doc -->
 *
 *
 * @see org.eclipse.emf.facet.efacet.metamodel.v0_2_0.efacetcatalog.EfacetcatalogPackage#getFacetSetCatalog()
 * @model
 * @generated
 */
@Deprecated
public interface FacetSetCatalog extends Catalog {

} // FacetSetCatalog
