| /* |
| * Copyright (c) 2011 Google Inc. |
| * |
| * 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 com.google.eclipse.protobuf.resource; |
| |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.InternalEObject; |
| import org.eclipse.emf.ecore.resource.Resource; |
| import org.eclipse.xtext.resource.IGlobalServiceProvider.ResourceServiceProviderImpl; |
| import org.eclipse.xtext.resource.IResourceServiceProvider; |
| import org.eclipse.xtext.resource.IResourceServiceProvider.Registry; |
| |
| import com.google.inject.Inject; |
| |
| /** |
| * @author alruiz@google.com (Alex Ruiz) |
| */ |
| public class GlobalResourceServiceProvider extends ResourceServiceProviderImpl { |
| @Inject public GlobalResourceServiceProvider(Registry registry, IResourceServiceProvider provider) { |
| super(registry, provider); |
| } |
| |
| @Override public <T> T findService(EObject e, Class<T> serviceType) { |
| if (e.eIsProxy()) { |
| InternalEObject internalEObject = (InternalEObject) e; |
| return findService(internalEObject.eProxyURI(), serviceType); |
| } |
| Resource resource = e.eResource(); |
| return (resource != null) ? findService(resource.getURI(), serviceType) : null; |
| } |
| } |