package org.bndtools.core.resolve; import java.util.LinkedList; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import aQute.bnd.build.model.BndEditModel; import aQute.bnd.build.model.EE; import aQute.bnd.osgi.Constants; import aQute.bnd.osgi.Processor; import biz.aQute.resolve.ResolutionCallback; import bndtools.Plugin; public class ResolveJob extends Job { private final BndEditModel model; private final List<ResolutionCallback> callbacks = new LinkedList<ResolutionCallback>(); private ResolutionResult result; public ResolveJob(BndEditModel model) { super("Resolving..."); this.model = model; } public IStatus validateBeforeRun() { try { // // The BndEdit model does not do property expansion. So // get the processor to get the expansions. // Processor p = model.getProperties(); String runfw = p.getProperty(Constants.RUNFW); if (runfw == null) return new Status(IStatus.ERROR, Plugin.PLUGIN_ID, 0, Messages.ResolutionJob_errorFrameworkOrExecutionEnvironmentUnspecified, null); EE ee = EE.parse(p.getProperty(Constants.RUNEE)); if (ee == null) return new Status(IStatus.ERROR, Plugin.PLUGIN_ID, 0, Messages.ResolutionJob_errorFrameworkOrExecutionEnvironmentUnspecified, null); return Status.OK_STATUS; } catch (Exception e) { throw new RuntimeException(e); } } @Override protected IStatus run(IProgressMonitor monitor) { ResolveOperation operation = new ResolveOperation(model, callbacks); operation.run(monitor); result = operation.getResult(); return Status.OK_STATUS; } public ResolutionResult getResolutionResult() { return result; } public void addCallback(ResolutionCallback callback) { callbacks.add(callback); } }