| /******************************************************************************* |
| * Copyright (c) 2015 Borland Software Corporation 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: |
| * Christopher Gerking - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.m2m.internal.qvt.oml.runtime.project; |
| |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.emf.common.EMFPlugin; |
| import org.eclipse.emf.common.util.URI; |
| import org.eclipse.m2m.internal.qvt.oml.compiler.ResolverUtils; |
| import org.eclipse.m2m.internal.qvt.oml.compiler.UnitResolver; |
| import org.eclipse.m2m.internal.qvt.oml.compiler.UnitResolverFactory; |
| import org.osgi.framework.Bundle; |
| |
| public class PlatformPluginUnitResolverFactory extends UnitResolverFactory { |
| |
| @Override |
| public boolean accepts(URI uri) { |
| return EMFPlugin.IS_ECLIPSE_RUNNING && uri.isPlatformPlugin(); |
| } |
| |
| @Override |
| public UnitResolver getResolver(URI uri) { |
| if (!uri.isPlatformPlugin() || uri.segmentCount() < 2) { |
| return null; |
| } |
| |
| String bundleId = uri.segment(1); |
| Bundle bundle = Platform.getBundle(bundleId); |
| if (bundle == null) { |
| return null; |
| } |
| |
| PlatformPluginUnitResolver resolver; |
| |
| URI sourceFolderURI = ResolverUtils.getSourceFolderURI(uri); |
| |
| if(sourceFolderURI != null && sourceFolderURI.segmentCount() > 2) { |
| IPath pluginRelativePath = new Path(sourceFolderURI.toPlatformString(true)).removeFirstSegments(1); |
| resolver = new PlatformPluginUnitResolver(bundle, pluginRelativePath); |
| } else { |
| resolver = new PlatformPluginUnitResolver(bundle); |
| } |
| |
| PlatformPluginUnitResolver.setupResolver(resolver, true, true); |
| return resolver; |
| } |
| |
| @Override |
| public String getQualifiedName(URI uri) { |
| if (!uri.isPlatformPlugin() || uri.segmentCount() < 2) { |
| return null; |
| } |
| |
| String bundleId = uri.segment(1); |
| Bundle bundle = Platform.getBundle(bundleId); |
| if (bundle == null) { |
| return null; |
| } |
| |
| IPath qualifiedName; |
| |
| IPath path = new Path(uri.toPlatformString(true)); |
| URI sourceFolderURI = ResolverUtils.getSourceFolderURI(uri); |
| |
| if(sourceFolderURI != null && sourceFolderURI.segmentCount() > 2) { |
| qualifiedName = new Path(uri.deresolve(sourceFolderURI).trimFileExtension().trimQuery().toString()); |
| } else { |
| qualifiedName = path.removeFirstSegments(1).removeFileExtension(); |
| |
| /** |
| * In case passed URI contains full path then truncate it related to specified source container. |
| */ |
| for (IPath sourceContainer : PlatformPluginUnitResolver.getSourceContainers(bundle)) { |
| int matchCount = qualifiedName.matchingFirstSegments(sourceContainer); |
| if (matchCount > 0) { |
| qualifiedName = qualifiedName.removeFirstSegments(matchCount); |
| break; |
| } |
| } |
| } |
| |
| return ResolverUtils.toQualifiedName(qualifiedName); |
| } |
| |
| } |