Search in sources :

Example 6 with IMetadataRepositoryManager

use of org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager in project knime-core by knime.

the class RepositoryUpdater method addDefaultRepositories.

/**
 * Adds default KNIME repositories if they don't already exist.
 */
public void addDefaultRepositories() {
    BundleContext context = FrameworkUtil.getBundle(getClass()).getBundleContext();
    ServiceReference<IProvisioningAgent> ref = context.getServiceReference(IProvisioningAgent.class);
    if (ref != null) {
        IProvisioningAgent agent = context.getService(ref);
        try {
            IMetadataRepositoryManager metadataManager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
            URL usFileUrl = FrameworkUtil.getBundle(getClass()).getEntry("/update-sites.txt");
            if ((metadataManager != null) && (usFileUrl != null)) {
                processDefaultRepositories(metadataManager, usFileUrl);
            }
        } finally {
            context.ungetService(ref);
        }
    }
}
Also used : IMetadataRepositoryManager(org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager) IProvisioningAgent(org.eclipse.equinox.p2.core.IProvisioningAgent) URL(java.net.URL) BundleContext(org.osgi.framework.BundleContext)

Example 7 with IMetadataRepositoryManager

use of org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager in project webtools.servertools by eclipse.

the class Extension method getProvisioningPlan.

public IProvisioningPlan getProvisioningPlan(boolean explain, IProgressMonitor monitor) {
    if (plan != null)
        return plan;
    // long time = System.currentTimeMillis();
    BundleContext bundleContext = Activator.getDefault().getBundle().getBundleContext();
    IPlanner planner = (IPlanner) ExtensionUtility.getService(bundleContext, IPlanner.SERVICE_NAME);
    IProfileRegistry profileRegistry = (IProfileRegistry) ExtensionUtility.getService(bundleContext, IProfileRegistry.SERVICE_NAME);
    IProfile profile = profileRegistry.getProfile(IProfileRegistry.SELF);
    IProfile[] profiles = profileRegistry.getProfiles();
    if (profile == null) {
        // it happens sometime , possibility of bug in profileRegistry
        for (int i = 0; i < profiles.length; i++) {
            if (profiles[i].getProfileId().equals(IProfileRegistry.SELF)) {
                profile = profiles[i];
                break;
            }
        }
    }
    if (profile == null)
        return null;
    IProfileChangeRequest pcr = planner.createChangeRequest(profile);
    pcr.add(iu);
    IProvisioningAgent agent = ExtensionUtility.getAgent(bundleContext);
    if (agent == null) {
        return null;
    }
    // Get all the known repositories when installing the server adapter.
    // If these repositories are not added, it can cause install problems if
    // the server adapter relies on the list of available software install sites
    URI[] knownRepositories = null;
    IMetadataRepositoryManager manager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
    if (manager != null) {
        manager.addRepository(uri);
        // Note: IRepositoryManager.REPOSITORIES_ALL will exclude the deselected update sites
        knownRepositories = manager.getKnownRepositories(IRepositoryManager.REPOSITORIES_ALL);
        // A fall back in case known repositories returns null
        if (knownRepositories == null) {
            knownRepositories = new URI[] { uri };
        }
    } else {
        knownRepositories = new URI[] { uri };
    }
    provContext = new ProvisioningContext(agent);
    // Add the new URLs to both the Metadata and Artifact repositories.
    // Note: only the IInstallableUnit that is passed into this class will be installed
    // as a server adapter. For example, if multiple update site URLs for discovery server
    // adapters are present, they will not be installed.
    provContext.setMetadataRepositories(knownRepositories);
    provContext.setArtifactRepositories(knownRepositories);
    if (!explain)
        // $NON-NLS-1$ //$NON-NLS-2$
        provContext.setProperty("org.eclipse.equinox.p2.director.explain", "false");
    // $NON-NLS-1$
    provContext.setProperty(ProvisioningContext.FOLLOW_REPOSITORY_REFERENCES, "true");
    plan = planner.getProvisioningPlan(pcr, provContext, monitor);
    // System.out.println("Time: " + (System.currentTimeMillis() - time)); // TODO
    return plan;
}
Also used : IMetadataRepositoryManager(org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager) IProvisioningAgent(org.eclipse.equinox.p2.core.IProvisioningAgent) IPlanner(org.eclipse.equinox.p2.planner.IPlanner) IProfileChangeRequest(org.eclipse.equinox.p2.planner.IProfileChangeRequest) URI(java.net.URI) BundleContext(org.osgi.framework.BundleContext)

Example 8 with IMetadataRepositoryManager

use of org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager in project webtools.servertools by eclipse.

the class ExtensionUpdateSite method getExtensions.

public List<IServerExtension> getExtensions(IProgressMonitor monitor) throws CoreException, ProvisionException {
    URI url2 = null;
    IMetadataRepositoryManager manager = null;
    IProvisioningAgent agent = null;
    List<IServerExtension> list = new ArrayList<IServerExtension>();
    URI[] existingSites = null;
    try {
        /*
			 * To discovery the server adapter, there are three methods:
			 * 1. Looking at the site.xml (if it exists). This is the legacy method
			 * 2. Looking for the org.eclipse.wst.server.core.serverAdapter property in a p2
			 *    update site (that may not have a site.xml). The property is necessary to identify
			 *    the InstallableUnit as a server type. Otherwise, all the InstallableUnits will show
			 *    up regardless of whether it is a server or not
			 * 3. If the user created the p2 update site using a category.xml file (migrating old site.xml
			 *    to use category.xml)
			 */
        BundleContext bd = org.eclipse.wst.server.discovery.internal.Activator.getDefault().getBundle().getBundleContext();
        agent = ExtensionUtility.getAgent(bd);
        url2 = new URI(url);
        // Method 1: Looking at the site.xml
        UpdateSiteMetadataRepositoryFactory mrf = new UpdateSiteMetadataRepositoryFactory();
        mrf.setAgent(ExtensionUtility.getAgent(bd));
        manager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
        // Sites already existing for both enabled and disabled
        URI[] existingSitesAll = manager.getKnownRepositories(IMetadataRepositoryManager.REPOSITORIES_ALL);
        URI[] existingSitesDisabled = manager.getKnownRepositories(IMetadataRepositoryManager.REPOSITORIES_DISABLED);
        int existingSitesAllLen = existingSitesAll == null ? 0 : existingSitesAll.length;
        int existingSitesDisabledLen = existingSitesDisabled == null ? 0 : existingSitesDisabled.length;
        existingSites = new URI[existingSitesAllLen + existingSitesDisabledLen];
        if (existingSitesAllLen > 0) {
            System.arraycopy(existingSitesAll, 0, existingSites, 0, existingSitesAllLen);
        }
        if (existingSitesDisabledLen > 0) {
            System.arraycopy(existingSitesDisabled, 0, existingSites, existingSitesAllLen, existingSitesDisabledLen);
        }
        // If the site.xml does not exist, the load will throw a org.eclipse.equinox.p2.core.ProvisionException
        try {
            IMetadataRepository repo = mrf.load(url2, IRepositoryManager.REPOSITORIES_ALL, monitor);
            // $NON-NLS-1$
            IQuery<IInstallableUnit> query = QueryUtil.createMatchQuery("id ~=/*org.eclipse.wst.server.core.serverAdapter/");
            list = getInstallableUnits(repo, query, url2, monitor);
        } catch (ProvisionException pe) {
            // $NON-NLS-1$
            Trace.trace(Trace.WARNING, "Error getting update site information", pe);
        }
        // specifying any server adapters there or no site.xml exists)
        if (list.isEmpty()) {
            manager.addRepository(url2);
            // Need to query for all IUs
            IQuery<IInstallableUnit> query = QueryUtil.createIUAnyQuery();
            IMetadataRepository repo = manager.loadRepository(url2, monitor);
            List<IServerExtension> list2 = getInstallableUnits(repo, query, url2, monitor);
            int size = list2.size();
            for (int i = 0; i < size; i++) {
                Extension e = (Extension) list2.get(i);
                IInstallableUnit[] iuArr = e.getIUs();
                if (iuArr != null && iuArr.length > 0) {
                    if (iuArr[0] != null) {
                        if (iuArr[0].getProperty(SERVER_ADAPTER_ID) != null) {
                            list.add(e);
                        }
                    }
                }
            }
        }
        // a provider property with org.eclipse.wst.server.core.serverAdapter
        if (list.isEmpty()) {
            manager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
            manager.addRepository(url2);
            // $NON-NLS-1$
            IQuery<IInstallableUnit> query = QueryUtil.createMatchQuery("id ~=/*org.eclipse.wst.server.core.serverAdapter/");
            IMetadataRepository repo = manager.loadRepository(url2, monitor);
            list = getInstallableUnits(repo, query, url2, monitor);
        }
        return list;
    } catch (ProvisionException e) {
        // $NON-NLS-1$
        Trace.trace(Trace.WARNING, "Error getting update info", e);
        throw e;
    } catch (Exception e) {
        // $NON-NLS-1$
        Trace.trace(Trace.WARNING, "Error getting update info", e);
        return new ArrayList<IServerExtension>(0);
    } finally {
        if (url2 != null && url2.getPath().length() != 0 && manager != null) {
            if (existingSites != null && existingSites.length > 0) {
                boolean urlExists = false;
                for (URI uri : existingSites) {
                    if (uri.getPath().equals(url2.getPath())) {
                        urlExists = true;
                        break;
                    }
                }
                // If site did not exist before, remove it as it was added with load
                if (!urlExists) {
                    manager.removeRepository(url2);
                }
            }
        }
    }
}
Also used : IMetadataRepositoryManager(org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager) IProvisioningAgent(org.eclipse.equinox.p2.core.IProvisioningAgent) URI(java.net.URI) CoreException(org.eclipse.core.runtime.CoreException) ProvisionException(org.eclipse.equinox.p2.core.ProvisionException) ProvisionException(org.eclipse.equinox.p2.core.ProvisionException) UpdateSiteMetadataRepositoryFactory(org.eclipse.equinox.internal.p2.updatesite.metadata.UpdateSiteMetadataRepositoryFactory) IInstallableUnit(org.eclipse.equinox.p2.metadata.IInstallableUnit) IMetadataRepository(org.eclipse.equinox.p2.repository.metadata.IMetadataRepository) BundleContext(org.osgi.framework.BundleContext)

Example 9 with IMetadataRepositoryManager

use of org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager in project epp.mpc by eclipse.

the class AbstractProvisioningOperation method addRepositories.

protected List<IMetadataRepository> addRepositories(SubMonitor monitor) throws URISyntaxException, ProvisionException {
    // tell p2 that it's okay to use these repositories
    ProvisioningSession session = ProvisioningUI.getDefaultUI().getSession();
    RepositoryTracker repositoryTracker = ProvisioningUI.getDefaultUI().getRepositoryTracker();
    repositoryLocations = new HashSet<URI>();
    if (addedRepositoryLocations == null) {
        addedRepositoryLocations = new HashSet<URI>();
    }
    Set<URI> knownRepositories = new HashSet<URI>(Arrays.asList(repositoryTracker.getKnownRepositories(session)));
    monitor.setWorkRemaining(items.size() * 5);
    for (CatalogItem descriptor : items) {
        String siteUrl = descriptor.getSiteUrl();
        if (siteUrl != null) {
            URI uri = URLUtil.toURI(siteUrl);
            if (repositoryLocations.add(uri) && !knownRepositories.contains(uri)) {
                checkCancelled(monitor);
                repositoryTracker.addRepository(uri, null, session);
                addedRepositoryLocations.add(uri);
            }
        }
        monitor.worked(1);
    }
    // fetch meta-data for these repositories
    ArrayList<IMetadataRepository> repositories = new ArrayList<IMetadataRepository>();
    monitor.setWorkRemaining(repositories.size());
    IMetadataRepositoryManager manager = (IMetadataRepositoryManager) session.getProvisioningAgent().getService(IMetadataRepositoryManager.SERVICE_NAME);
    for (URI uri : repositoryLocations) {
        checkCancelled(monitor);
        IMetadataRepository repository = manager.loadRepository(uri, monitor.newChild(1));
        repositories.add(repository);
    }
    return repositories;
}
Also used : CatalogItem(org.eclipse.equinox.internal.p2.discovery.model.CatalogItem) ProvisioningSession(org.eclipse.equinox.p2.operations.ProvisioningSession) IMetadataRepositoryManager(org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager) ArrayList(java.util.ArrayList) IMetadataRepository(org.eclipse.equinox.p2.repository.metadata.IMetadataRepository) URI(java.net.URI) RepositoryTracker(org.eclipse.equinox.p2.operations.RepositoryTracker) HashSet(java.util.HashSet)

Example 10 with IMetadataRepositoryManager

use of org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager in project epp.mpc by eclipse.

the class MarketplaceCatalog method checkForUpdates.

protected IStatus checkForUpdates(List<MarketplaceNodeCatalogItem> updateCheckNeeded, final Map<String, IInstallableUnit> installedIUs, final IProgressMonitor monitor) {
    Map<URI, List<MarketplaceNodeCatalogItem>> installedCatalogItemsByUpdateUri = new HashMap<URI, List<MarketplaceNodeCatalogItem>>();
    for (MarketplaceNodeCatalogItem catalogItem : updateCheckNeeded) {
        INode node = catalogItem.getData();
        String updateurl = node.getUpdateurl();
        try {
            if (updateurl == null) {
                catalogItem.setAvailable(false);
                continue;
            }
            URI uri = new URI(updateurl);
            List<MarketplaceNodeCatalogItem> catalogItemsThisSite = installedCatalogItemsByUpdateUri.get(uri);
            if (catalogItemsThisSite == null) {
                catalogItemsThisSite = new ArrayList<MarketplaceNodeCatalogItem>();
                installedCatalogItemsByUpdateUri.put(uri, catalogItemsThisSite);
            }
            catalogItemsThisSite.add(catalogItem);
        } catch (URISyntaxException e) {
            MarketplaceClientUi.log(IStatus.WARNING, Messages.MarketplaceCatalog_InvalidRepositoryUrl, node.getName(), updateurl);
            catalogItem.setAvailable(false);
        }
    }
    if (installedCatalogItemsByUpdateUri.isEmpty()) {
        return Status.OK_STATUS;
    }
    ConcurrentTaskManager executor = new ConcurrentTaskManager(installedCatalogItemsByUpdateUri.size(), Messages.MarketplaceCatalog_checkingForUpdates);
    try {
        final IProgressMonitor pm = new NullProgressMonitor() {

            @Override
            public boolean isCanceled() {
                return super.isCanceled() || monitor.isCanceled();
            }
        };
        for (Map.Entry<URI, List<MarketplaceNodeCatalogItem>> entry : installedCatalogItemsByUpdateUri.entrySet()) {
            final URI uri = entry.getKey();
            final List<MarketplaceNodeCatalogItem> catalogItemsThisSite = entry.getValue();
            executor.submit(new Runnable() {

                public void run() {
                    ProvisioningSession session = ProvisioningUI.getDefaultUI().getSession();
                    IMetadataRepositoryManager manager = (IMetadataRepositoryManager) session.getProvisioningAgent().getService(IMetadataRepositoryManager.SERVICE_NAME);
                    try {
                        for (MarketplaceNodeCatalogItem item : catalogItemsThisSite) {
                            if (Boolean.TRUE.equals(item.getAvailable())) {
                                item.setAvailable(null);
                            }
                        }
                        IMetadataRepository repository = manager.loadRepository(uri, pm);
                        IQuery<IInstallableUnit> query = // 
                        QueryUtil.createMatchQuery(// $NON-NLS-1$
                        "id ~= /*.feature.group/ && " + // $NON-NLS-1$
                        "properties['org.eclipse.equinox.p2.type.group'] == true ");
                        IQueryResult<IInstallableUnit> result = repository.query(query, pm);
                        // compute highest version for all available IUs.
                        Map<String, Version> repositoryIuVersionById = new HashMap<String, Version>();
                        for (IInstallableUnit iu : result) {
                            String key = createRepositoryIuKey(uri.toString(), iu.getId());
                            Version version = iu.getVersion();
                            Version priorVersion = repositoryIuVersionById.put(key, version);
                            if (priorVersion != null && priorVersion.compareTo(version) > 0) {
                                repositoryIuVersionById.put(key, priorVersion);
                            }
                        }
                        for (MarketplaceNodeCatalogItem item : catalogItemsThisSite) {
                            List<MarketplaceNodeInstallableUnitItem> installableUnitItems = item.getInstallableUnitItems();
                            for (MarketplaceNodeInstallableUnitItem iuItem : installableUnitItems) {
                                String key = createRepositoryIuKey(uri.toString(), iuItem.getId());
                                Version availableVersion = repositoryIuVersionById.get(key);
                                MarketplaceCatalog.this.repositoryIuVersionById.put(key, availableVersion);
                                if (availableVersion != null) {
                                    item.setAvailable(true);
                                }
                            }
                        }
                        for (MarketplaceNodeCatalogItem item : catalogItemsThisSite) {
                            setUpdatesAvailable(installedIUs, item);
                        }
                    } catch (ProvisionException e) {
                        MultiStatus errorStatus = new MultiStatus(MarketplaceClientUi.BUNDLE_ID, IStatus.WARNING, NLS.bind(Messages.MarketplaceCatalog_ErrorReadingRepository, uri), e);
                        for (MarketplaceNodeCatalogItem item : catalogItemsThisSite) {
                            item.setAvailable(false);
                            errorStatus.add(MarketplaceClientUi.newStatus(IStatus.INFO, item.getName()));
                        }
                        MarketplaceClientUi.getLog().log(errorStatus);
                    } catch (OperationCanceledException e) {
                    // nothing to do
                    }
                }
            });
        }
        try {
            executor.waitUntilFinished(monitor);
        } catch (CoreException e) {
            MarketplaceClientUi.error(e);
            return e.getStatus();
        }
        return Status.OK_STATUS;
    } finally {
        executor.shutdownNow();
    }
}
Also used : NullProgressMonitor(org.eclipse.core.runtime.NullProgressMonitor) INode(org.eclipse.epp.mpc.core.model.INode) IMetadataRepositoryManager(org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager) IQuery(org.eclipse.equinox.p2.query.IQuery) HashMap(java.util.HashMap) OperationCanceledException(org.eclipse.core.runtime.OperationCanceledException) MultiStatus(org.eclipse.core.runtime.MultiStatus) URISyntaxException(java.net.URISyntaxException) URI(java.net.URI) ProvisionException(org.eclipse.equinox.p2.core.ProvisionException) Version(org.eclipse.equinox.p2.metadata.Version) ArrayList(java.util.ArrayList) List(java.util.List) IInstallableUnit(org.eclipse.equinox.p2.metadata.IInstallableUnit) ProvisioningSession(org.eclipse.equinox.p2.operations.ProvisioningSession) IQueryResult(org.eclipse.equinox.p2.query.IQueryResult) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) CoreException(org.eclipse.core.runtime.CoreException) ConcurrentTaskManager(org.eclipse.epp.internal.mpc.ui.util.ConcurrentTaskManager) IMetadataRepository(org.eclipse.equinox.p2.repository.metadata.IMetadataRepository) HashMap(java.util.HashMap) Map(java.util.Map)

Aggregations

IMetadataRepositoryManager (org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager)16 URI (java.net.URI)10 IMetadataRepository (org.eclipse.equinox.p2.repository.metadata.IMetadataRepository)10 IProvisioningAgent (org.eclipse.equinox.p2.core.IProvisioningAgent)6 IInstallableUnit (org.eclipse.equinox.p2.metadata.IInstallableUnit)5 ProvisioningSession (org.eclipse.equinox.p2.operations.ProvisioningSession)5 ArrayList (java.util.ArrayList)4 ProvisionException (org.eclipse.equinox.p2.core.ProvisionException)4 IArtifactRepositoryManager (org.eclipse.equinox.p2.repository.artifact.IArtifactRepositoryManager)4 CoreException (org.eclipse.core.runtime.CoreException)3 BundleContext (org.osgi.framework.BundleContext)3 File (java.io.File)2 IOException (java.io.IOException)2 URISyntaxException (java.net.URISyntaxException)2 Map (java.util.Map)2 IStatus (org.eclipse.core.runtime.IStatus)2 RepositoryTracker (org.eclipse.equinox.p2.operations.RepositoryTracker)2 BufferedOutputStream (java.io.BufferedOutputStream)1 FileOutputStream (java.io.FileOutputStream)1 OutputStream (java.io.OutputStream)1