blob: 041df04c918261cfd0dcf2244bea8e741f00f403 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2022 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.internal.ui.wizards.product;
import java.util.*;
import org.eclipse.core.resources.IFile;
import org.eclipse.osgi.service.resolver.BundleDescription;
import org.eclipse.pde.core.plugin.*;
import org.eclipse.pde.internal.core.DependencyManager;
import org.eclipse.pde.internal.core.iproduct.IProduct;
import org.eclipse.pde.internal.core.iproduct.IProductModelFactory;
public class ProductFromExtensionOperation extends BaseProductCreationOperation {
private String fId;
public ProductFromExtensionOperation(IFile file, String productId) {
super(file);
fId = productId;
}
@Override
protected void initializeProduct(IProduct product) {
if (fId == null)
return;
IProductModelFactory factory = product.getModel().getFactory();
initializeProductInfo(factory, product, fId);
addPlugins(factory, product, getPlugins());
super.initializeProduct(product);
}
private String[] getPlugins() {
int lastDot = fId.lastIndexOf('.');
if (lastDot == -1)
return new String[0];
List<BundleDescription> plugins = new ArrayList<>();
// add plugin declaring product and its pre-reqs
IPluginModelBase model = PluginRegistry.findModel(fId.substring(0, lastDot));
if (model != null) {
plugins.add(model.getBundleDescription());
}
// add plugin declaring product application and its pre-reqs
IPluginElement element = getProductExtension(fId);
if (element != null) {
IPluginAttribute attr = element.getAttribute("application"); //$NON-NLS-1$
if (attr != null) {
String appId = attr.getValue();
lastDot = appId.lastIndexOf('.');
if (lastDot != -1) {
model = PluginRegistry.findModel(appId.substring(0, lastDot));
if (model != null) {
plugins.add(model.getBundleDescription());
}
}
}
}
Set<BundleDescription> bundles = DependencyManager.findRequirementsClosure(plugins,
DependencyManager.Options.INCLUDE_NON_TEST_FRAGMENTS);
return bundles.stream().map(BundleDescription::getSymbolicName).toArray(String[]::new);
}
}