Programmazione:Java/Eclipse RCP/Update by site

Da WikiSitech.
Vai alla navigazioneVai alla ricerca

Questo esempio serve per mostrare come leggere le features e i plugin contenuti in esse da un Update Site e per aggiornare l'applicazione tramite questo site...

  • NB: Questo codice è valido fino alla versione 3.3 di eclipse....dalla 3.4 la gestione dell'update è stata radicalmente cambiata*

  try {
     URL url = new URL("file:/D:/Work/workspace/desktop/org.rimondini.rcp.desktop.update/");
     ISite site = org.eclipse.update.core.SiteManager.getSite(url, monitor);
     if (site != null) {
        ISiteFeatureReference[] r_features = site.getFeatureReferences();
        if (r_features.length > 0) {
           ILocalSite local = SiteManager.getLocalSite();
           for (int i = 0; i < local.getCurrentConfiguration().getConfiguredSites().length; i++) {
              IConfiguredSite c_site = local.getCurrentConfiguration().getConfiguredSites()[i];
              IFeatureReference[] c_features = c_site.getFeatureReferences();
              Map<String, IFeatureReference> m_features = new HashMap<String, IFeatureReference>();
              Map<String, IPluginEntry> m_plugins = new HashMap<String, IPluginEntry>();
              for (int f = 0; f < c_features.length; f++) {
                 IFeature feature = c_features[f].getFeature(new SubProgressMonitor(monitor, 3));
                 InstallRegistry.registerFeature(feature);
                 m_features.put(feature.getVersionedIdentifier().getIdentifier(), c_features[f]);
                 IPluginEntry[] plugins = feature.getPluginEntries();
                 for (int p = 0; p < plugins.length; p++) {
                    InstallRegistry.registerPlugin(plugins[p]);
                    m_plugins.put(plugins[p].getVersionedIdentifier().getIdentifier(), plugins[p]);
                 }
              }
              for (int f = 0; f < r_features.length; f++) {
                 boolean install = false;
                 IFeature r_feature = r_features[f].getFeature(new SubProgressMonitor(monitor, 3));
                 if (m_features.containsKey(r_features[f].getVersionedIdentifier().getIdentifier())) {
                    IPluginEntry[] remote_plugins = r_feature.getPluginEntries();
                    for (int p = 0; p < remote_plugins.length; p++) {
                       IPluginEntry plugin = m_plugins.get(remote_plugins[p].getVersionedIdentifier().getIdentifier());
                       PluginVersionIdentifier remote_version = remote_plugins[p].getVersionedIdentifier().getVersion();
                       PluginVersionIdentifier plugin_version = plugingetVersionedIdentifier().getVersion();
                       if (plugin == null || remote_version.isGreaterThan(plugin_version)) {
                          install = true;
                          break;
                       }
                    }
                 } else {
                    install = true;
                 }
                 if (install) {
                    IOperationFactory o_fact = OperationsManager.getOperationFactory();
                    IInstallFeatureOperation operation = o_fact.createInstallOperation(c_site, r_feature, null, null, null);
                    operation.execute(new SubProgressMonitor(monitor, 3), null);
                    OperationsManager.addPendingOperation(operation);
                    restart_application = true;
                 }
              }
           }
           if (restart_application) {
              OperationsManager.applyChangesNow();
              if (!local.save()) {
                 ILoggerFactory.instance.getLogger(getClass()).error("Configuration saving failed");
              }
           }
        }
     } else {
        ILoggerFactory.instance.getLogger(getClass()).error("Update site not found");
     }
  } catch (MalformedURLException e) {
     ILoggerFactory.instance.getLogger(getClass()).error("Update error", e);
  } catch (CoreException e) {
     ILoggerFactory.instance.getLogger(getClass()).error("Update error", e);
  }