blob: aa29e496c860d011d9ecd85ac5e8c09a577363f2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2015 IBM 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.internal.ui.wizards.imports;
import org.eclipse.pde.internal.core.SourceLocation;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.Path;
import org.eclipse.pde.core.plugin.IPluginModelBase;
import org.eclipse.pde.core.target.TargetBundle;
import org.eclipse.pde.internal.core.*;
/**
* Used to locate source when performing an import that is *not* from the active
* target platform.
*/
public class AlternateSourceLocations extends SourceLocationManager {
/**
* All models to consider as source locations.
*/
private IPluginModelBase[] models;
/**
* Resolved bundles corresponding to models
*/
private TargetBundle[] bundles;
/**
* List of source locations that reference root folders containing
* sub-folders of source directories. This is the old-style source
* plug-in.
*/
private List<SourceLocation> oldSourceRoots;
/**
* Constructs alternate source locations on the given plug-ins.
*
* @param plugins models to consider as source locations
* @param rbs corresponding resolved bundles
*/
public AlternateSourceLocations(IPluginModelBase[] plugins, TargetBundle rbs[]) {
models = plugins;
bundles = rbs;
}
/**
* Returns a bundle manifest location manager that knows about source bundles in the current
* platform.
* @return bundle manifest source location manager
*/
@Override
protected BundleManifestSourceLocationManager initializeBundleManifestLocations() {
BundleManifestSourceLocationManager manager = new BundleManifestSourceLocationManager();
manager.setPlugins(models);
return manager;
}
/**
* Returns a list of source locations referencing root folders containing source.
* These are old-style source plug-ins that contain a sub-folder for each plug-in
* that source is provided for.
*
* @return collection of old-style source locations that have been contributed via
* extension point
*/
@Override
public List<SourceLocation> getExtensionLocations() {
if (oldSourceRoots == null) {
oldSourceRoots = new ArrayList<>();
for (int i = 0; i < bundles.length; i++) {
String path = bundles[i].getSourcePath();
if (path != null) {
oldSourceRoots.add(new SourceLocation(new Path(models[i].getInstallLocation()).append(path)));
}
}
}
return oldSourceRoots;
}
}