/*******************************************************************************
 * Copyright (c) 2015 EclipseSource Muenchen GmbH and others.
 * 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:
 *     Stefan Dirix - initial API and implementation
 *******************************************************************************/
package org.eclipse.emf.compare.diagram.ide.ui.papyrus.dependency;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.compare.diagram.ide.ui.papyrus.util.ModelExtensionUtil;
import org.eclipse.emf.compare.ide.ui.dependency.IDependencyProvider;
import org.eclipse.emf.ecore.resource.URIConverter;

/**
 * A client of the EMF Compare Dependency extension point providing a lightweight integration of the Papyrus
 * ModelSet approach with the EMF Model Resolution Strategy.
 * 
 * @author Stefan Dirix <sdirix@eclipsesource.com>
 */
public class PapyrusDependencyProvider implements IDependencyProvider {

	/**
	 * File extensions registered in Papyrus.
	 */
	private List<String> fileExtensions;

	/**
	 * Constructs and initializes the PapyrusDependencyIdentifier.
	 */
	public PapyrusDependencyProvider() {
		fileExtensions = new ArrayList<String>(ModelExtensionUtil.getRegisteredFileExtensions());
	}

	/**
	 * {@inheritDoc}
	 */
	public boolean apply(URI uri) {
		return fileExtensions.contains(uri.fileExtension());
	}

	/**
	 * {@inheritDoc} Checks the Papyrus model extension point and tries to determine all dependencies from the
	 * registered information.
	 */
	public Set<URI> getDependencies(URI uri) {
		final Set<URI> dependencies = new LinkedHashSet<URI>();
		for (String fileExtension : fileExtensions) {
			URI dependencyURI = uri.trimFileExtension().appendFileExtension(fileExtension);
			if (URIConverter.INSTANCE.exists(dependencyURI, null)) {
				dependencies.add(dependencyURI);
			}
		}
		return dependencies;
	}
}
