/*******************************************************************************
* Copyright (c) 2012 itemis AG (http://www.itemis.eu) 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
*******************************************************************************/
package org.xpect.ui.services;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IStorage;
import org.eclipse.emf.common.util.URI;
import org.eclipse.xtext.resource.IResourceServiceProvider;
import org.eclipse.xtext.ui.resource.IResourceUIServiceProvider;
import org.eclipse.xtext.ui.shared.Access;
import org.eclipse.xtext.util.Pair;
import org.xpect.XpectJavaModel;
import org.xpect.ui.internal.XpectActivator;
import org.xpect.ui.util.XpectUtil;
import org.xpect.util.IXtInjectorProvider;
import com.google.inject.Injector;
/**
* @author Moritz Eysholdt - Initial contribution and API
*/
public class XtResourceUIServiceProviderProvider implements IResourceServiceProvider.Provider {
public IResourceServiceProvider get(URI uri, String contentType) {
for (Pair<IStorage, IProject> p : Access.getIStorage2UriMapper().get().getStorages(uri))
if (p.getFirst() instanceof IFile) {
IFile file = (IFile) p.getFirst();
XpectJavaModel javaModel = XpectUtil.loadJavaModel(file);
Injector injector = IXtInjectorProvider.INSTANCE.getInjector(javaModel, uri);
if (injector != null)
return injector.getInstance(IResourceUIServiceProvider.class);
}
return XpectActivator.getInstance().getInjector(XpectActivator.ORG_XPECT_XPECT).getInstance(IResourceUIServiceProvider.class);
}
}