/*****************************************************************************
 * Copyright (c) 2013, 2017 CEA LIST and others.
 *
 * 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:
 *   CEA LIST - Initial API and implementation
 *   Christian W. Damus (CEA) - bug 429242
 *
 *****************************************************************************/
package org.eclipse.papyrus.cdo.core.importer;

import java.util.Collection;

import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.papyrus.cdo.internal.core.exporter.DefaultModelExportConfigurationFactory;
import org.eclipse.papyrus.cdo.internal.core.importer.DefaultModelImportConfigurationFactory;

/**
 * This is the IModelTransferConfiguration type. Enjoy.
 */
public interface IModelTransferConfiguration {

	Collection<IModelTransferNode> getModelsToTransfer();

	IModelTransferNode addModelToTransfer(URI resourceURI);

	void removeModelToTransfer(IModelTransferNode node);

	ResourceSet getResourceSet();

	void addModelDependentsProvider(IModelDependentsProvider provider);

	IModelTransferOperation.Context getOperationContext();

	boolean hasSashModelContent();

	boolean isStripSashModelContent();

	void setStripSashModelContent(boolean stripSashModelContent);

	Diagnostic validate();

	void dispose();

	void addModelTransferListener(IModelTransferListener listener);

	void removeModelTransferListener(IModelTransferListener listener);

	interface Factory {

		Factory IMPORT = new DefaultModelImportConfigurationFactory();

		Factory EXPORT = new DefaultModelExportConfigurationFactory();

		/**
		 * Creates a new model transfer configuration. If a {@code ResourceSet} is provided,
		 * then the configuration will use it to load resources for dependency analysis. It will
		 * then be the caller's responsibility to clean up that resource set, if necessary,
		 * after completion of the transfer process.
		 *
		 * @param operationContext
		 *            a context in which to run model transfer operations
		 * @param resourceSet
		 *            an optional resource set for the configuration to use for dependency analysis; may be {@code null}
		 *
		 * @return the model transfer configuration
		 */
		IModelTransferConfiguration create(IModelTransferOperation.Context operationContext, ResourceSet resourceSet);
	}
}
