blob: 8a0ecb4f27342824046199cf81a470a1ec8e8015 [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2015 CEA LIST.
*
* 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:
* Thomas Daniellou (CEA LIST) - Initial API and implementation
*****************************************************************************/
package org.eclipse.papyrus.adltool.reversible.project;
import static org.eclipse.papyrus.adltool.Activator.log;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.osgi.service.resolver.BundleDescription;
import org.eclipse.osgi.service.resolver.BundleSpecification;
import org.eclipse.osgi.service.resolver.ExportPackageDescription;
import org.eclipse.osgi.service.resolver.ImportPackageSpecification;
import org.eclipse.osgi.service.resolver.VersionRange;
import org.eclipse.papyrus.adltool.ADL4EclipseUtils;
import org.eclipse.papyrus.adltool.reversible.factory.ReversibleFactory;
import org.eclipse.papyrus.adltool.reversible.packages.ReversiblePackage;
import org.eclipse.papyrus.osgi.profile.OSGIStereotypes;
import org.eclipse.swt.graphics.Image;
import org.osgi.framework.Version;
/**
* <p>This class is an adapter of the BundleDescription that represents a bundle in
* the system. (Loaded, workspace, fragment plug-ins)</p>
* <p>
* Since the workspace and loaded plug-ins are already adapted with the LoadedPlugin
* and WorkspacePlugin, this adapter can be used for Fragment plug-ins.</p>
* <p>
* For now, a reversed Fragment plug-in will be the same as a reversed
* LoadedPlugin.</p>
*/
public class FragmentPlugin extends AbstractPlugin {
/**
* The adaptee.
*/
private BundleDescription bundleDescription;
public FragmentPlugin(BundleDescription bundleDescription) {
super();
this.bundleDescription = bundleDescription;
}
@Override
public String getId() {
return bundleDescription.getSymbolicName();
}
@Override
public String getStereotypeName() {
return OSGIStereotypes.BUNDLE;
}
@Override
public Type getType() {
return Type.BUNDLE;
}
@Override
public Image getImage() {
return ADL4EclipseUtils.getImage("img/bundle_obj.gif");
}
@Override
public boolean isSingleton() {
return bundleDescription.isSingleton();
}
@Override
public List<ReversibleProject> getDependencies() {
List<ReversibleProject> dependencies = new ArrayList<>();
BundleSpecification[] requiredBundles = bundleDescription.getRequiredBundles();
if (requiredBundles != null) {
for (BundleSpecification requireBundle : requiredBundles) {
ReversibleProject plugin = ReversibleFactory.getInstance().getPlugin(requireBundle.getName());
if (plugin != null) {
dependencies.add(plugin);
VersionRange version = requireBundle.getVersionRange();
if (version != null) {
reversibleVersion.put(plugin, new StereotypeVersion(version));
}
} else {
log.warn(getType() + " \"" + getId() + "\": cannot find child " + requireBundle.getName());
}
}
}
return dependencies;
}
@Override
public List<ReversiblePackage> getExportedPackages() {
List<ReversiblePackage> exportedPackages = new ArrayList<>();
ExportPackageDescription[] exportPackages = bundleDescription.getExportPackages();
if (exportPackages != null) {
for (ExportPackageDescription exportPackage : exportPackages) {
ReversiblePackage reversibleExportPackage = ReversibleFactory.getInstance().makeReversible(exportPackage);
exportedPackages.add(reversibleExportPackage);
Version version = exportPackage.getVersion();
if (version != null) {
reversibleVersion.put(reversibleExportPackage, new StereotypeVersion(version));
}
}
}
return exportedPackages;
}
@Override
public List<ReversiblePackage> getImportedPackages() {
List<ReversiblePackage> importedPackages = new ArrayList<>();
ImportPackageSpecification[] importPackages = bundleDescription.getImportPackages();
if (importPackages != null) {
for (ImportPackageSpecification importPackage : importPackages) {
ReversiblePackage reversibleImportPackage = ReversibleFactory.getInstance().makeReversible(importPackage);
importedPackages.add(reversibleImportPackage);
VersionRange version = importPackage.getVersionRange();
if (version != null) {
reversibleVersion.put(reversibleImportPackage, new StereotypeVersion(version));
}
}
}
return importedPackages;
}
@Override
protected String getBundleValue(String key) {
// Unused
return null;
}
}