use of aQute.bnd.build.model.BndEditModel in project bnd by bndtools.
the class BndrunResolveContextTest method testBasicFindProviders.
public static void testBasicFindProviders() {
MockRegistry registry = new MockRegistry();
registry.addPlugin(createRepo(IO.getFile("testdata/repo1.index.xml")));
BndEditModel runModel = new BndEditModel();
BndrunResolveContext context = new BndrunResolveContext(runModel, registry, log);
Requirement req = new CapReqBuilder("osgi.wiring.package").addDirective("filter", "(osgi.wiring.package=org.apache.felix.gogo.api)").buildSyntheticRequirement();
List<Capability> providers = context.findProviders(req);
assertEquals(1, providers.size());
Resource resource = providers.get(0).getResource();
assertEquals(IO.getFile("testdata/repo1/org.apache.felix.gogo.runtime-0.10.0.jar").toURI(), findContentURI(resource));
}
use of aQute.bnd.build.model.BndEditModel in project bnd by bndtools.
the class BndrunResolveContextTest method testDontResolveBuildOnlyLibraries.
public static void testDontResolveBuildOnlyLibraries() {
MockRegistry registry = new MockRegistry();
registry.addPlugin(createRepo(IO.getFile("testdata/buildrepo.index.xml")));
BndEditModel runModel = new BndEditModel();
BndrunResolveContext context;
context = new BndrunResolveContext(runModel, registry, log);
List<Capability> providers1 = context.findProviders(CapReqBuilder.createPackageRequirement("org.osgi.framework", null).buildSyntheticRequirement());
assertEquals(0, providers1.size());
context = new BndrunResolveContext(runModel, registry, log);
List<Capability> providers2 = context.findProviders(CapReqBuilder.createPackageRequirement("java.security", null).buildSyntheticRequirement());
assertEquals(0, providers2.size());
}
use of aQute.bnd.build.model.BndEditModel in project bndtools by bndtools.
the class PkgRenameParticipant method createChange.
@Override
public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
final Map<IFile, TextChange> fileChanges = new HashMap<IFile, TextChange>();
IResourceProxyVisitor visitor = new IResourceProxyVisitor() {
@Override
public boolean visit(IResourceProxy proxy) throws CoreException {
if ((proxy.getType() == IResource.FOLDER) || (proxy.getType() == IResource.PROJECT)) {
return true;
}
if (!((proxy.getType() == IResource.FILE) && proxy.getName().toLowerCase().endsWith(".bnd"))) {
return false;
}
/* we're dealing with a *.bnd file */
/* get the proxied file */
IFile resource = (IFile) proxy.requestResource();
/* read the file as a single string */
String bndFileText = null;
try {
bndFileText = FileUtils.readFully(resource).get();
} catch (Exception e) {
String str = "Could not read file " + proxy.getName();
logger.logError(str, e);
throw new OperationCanceledException(str);
}
/*
* get the previous change for this file if it exists, or otherwise create a new change for it, but do
* not store it yet: wait until we know if there are actually changes in the file
*/
TextChange fileChange = getTextChange(resource);
final boolean fileChangeIsNew = (fileChange == null);
if (fileChange == null) {
fileChange = new TextFileChange(proxy.getName(), resource);
fileChange.setEdit(new MultiTextEdit());
}
TextEdit rootEdit = fileChange.getEdit();
BndEditModel model = new BndEditModel();
Document document = new Document(bndFileText);
try {
model.loadFrom(document);
} catch (IOException e) {
String str = "Could not load document " + proxy.getName();
logger.logError(str, e);
throw new OperationCanceledException(str);
}
/* loop over all renames to perform */
for (Map.Entry<IPackageFragment, RenameArguments> entry : pkgFragments.entrySet()) {
IPackageFragment pkgFragment = entry.getKey();
RenameArguments arguments = entry.getValue();
final String oldName = pkgFragment.getElementName();
final String newName = arguments.getNewName();
List<ImportPattern> newImportedPackages = makeNewHeaders(model.getImportPatterns(), oldName, newName);
if (newImportedPackages != null) {
model.setImportPatterns(newImportedPackages);
}
List<ExportedPackage> newExportedPackages = makeNewHeaders(model.getExportedPackages(), oldName, newName);
if (newExportedPackages != null) {
model.setExportedPackages(newExportedPackages);
}
List<String> newPrivatePackages = makeNewHeaders(model.getPrivatePackages(), oldName, newName);
if (newPrivatePackages != null) {
model.setPrivatePackages(newPrivatePackages);
}
Map<String, String> changes = model.getDocumentChanges();
for (Iterator<Entry<String, String>> iter = changes.entrySet().iterator(); iter.hasNext(); ) {
Entry<String, String> change = iter.next();
String propertyName = change.getKey();
String stringValue = change.getValue();
addEdit(document, rootEdit, propertyName, stringValue);
iter.remove();
}
Pattern pattern = Pattern.compile(/* match start boundary */
"(^|" + grammarSeparator + ")" + /* match bundle activator */
"(Bundle-Activator\\s*:\\s*)" + /* match itself / package name */
"(" + Pattern.quote(oldName) + ")" + /* match class name */
"(\\.[^\\.]+)" + /* match end boundary */
"(" + grammarSeparator + "|" + Pattern.quote("\\") + "|$)");
/* find all matches to replace and add them to the root edit */
Matcher matcher = pattern.matcher(bndFileText);
while (matcher.find()) {
rootEdit.addChild(new ReplaceEdit(matcher.start(3), matcher.group(3).length(), newName));
}
}
/*
* only store the changes when no changes were stored before for this file and when there are actually
* changes.
*/
if (fileChangeIsNew && rootEdit.hasChildren()) {
fileChanges.put(resource, fileChange);
}
return false;
}
};
/* determine which projects have to be visited */
Set<IProject> projectsToVisit = new HashSet<IProject>();
for (IPackageFragment pkgFragment : pkgFragments.keySet()) {
projectsToVisit.add(pkgFragment.getResource().getProject());
for (IProject projectToVisit : pkgFragment.getResource().getProject().getReferencingProjects()) {
projectsToVisit.add(projectToVisit);
}
for (IProject projectToVisit : pkgFragment.getResource().getProject().getReferencedProjects()) {
projectsToVisit.add(projectToVisit);
}
}
/* visit the projects */
for (IProject projectToVisit : projectsToVisit) {
projectToVisit.accept(visitor, IContainer.NONE);
}
if (fileChanges.isEmpty()) {
/* no changes at all */
return null;
}
/* build a composite change with all changes */
CompositeChange cs = new CompositeChange(changeTitle);
for (TextChange fileChange : fileChanges.values()) {
cs.add(fileChange);
}
return cs;
}
use of aQute.bnd.build.model.BndEditModel in project bndtools by bndtools.
the class ReleaseHelper method updateBundleVersion.
private static void updateBundleVersion(ReleaseContext context, Baseline current, Builder builder) throws IOException, CoreException {
Version bundleVersion = current.getSuggestedVersion();
if (bundleVersion != null) {
File file = builder.getPropertiesFile();
Properties properties = builder.getProperties();
if (file == null) {
file = context.getProject().getPropertiesFile();
properties = context.getProject().getProperties();
}
final IFile resource = (IFile) ReleaseUtils.toResource(file);
final Document document;
if (resource.exists()) {
byte[] bytes = readFully(resource.getContents());
document = new Document(new String(bytes, resource.getCharset()));
} else {
//$NON-NLS-1$
document = new Document("");
}
final BndEditModel model;
BndEditModel model2;
try {
model2 = new BndEditModel(Central.getWorkspace());
} catch (Exception e) {
System.err.println("Unable to create BndEditModel with Workspace, defaulting to without Workspace");
model2 = new BndEditModel();
}
model = model2;
model.loadFrom(document);
String currentVersion = model.getBundleVersionString();
String templateVersion = updateTemplateVersion(currentVersion, bundleVersion);
model.setBundleVersion(templateVersion);
properties.setProperty(Constants.BUNDLE_VERSION, templateVersion);
final Document finalDoc = document;
Runnable run = new Runnable() {
@Override
public void run() {
model.saveChangesTo(finalDoc);
try {
writeFully(finalDoc.get(), resource, false);
resource.refreshLocal(IResource.DEPTH_ZERO, null);
} catch (CoreException e) {
throw new RuntimeException(e);
}
}
};
if (Display.getCurrent() == null) {
Display.getDefault().syncExec(run);
} else
run.run();
}
}
use of aQute.bnd.build.model.BndEditModel in project bnd by bndtools.
the class JpmRepoTest method testScr.
public void testScr() {
Repository repo = ws.getPlugin(Repository.class);
BndEditModel model = new BndEditModel();
model.setRunFw("org.apache.felix.framework");
List<Requirement> requires = new ArrayList<Requirement>();
CapReqBuilder capReq = CapReqBuilder.createSimpleRequirement("osgi.extender", "osgi.component", "[1.1,2)");
requires.add(capReq.buildSyntheticRequirement());
Map<Requirement, Collection<Capability>> shell = repo.findProviders(requires);
assertNotNull(shell);
assertEquals(1, shell.size());
}
Aggregations