/** * Notify all interested listeners the cached PDEState has changed * * @param newState the new PDEState. */ private void fireStateChanged(PDEState newState) { if (fStateListeners != null) { ListIterator li = fStateListeners.listIterator(); while (li.hasNext()) ((IStateDeltaListener)li.next()).stateChanged(newState.getState()); } }
fState = new PDEState( fWorkspaceManager.getPluginPaths(), fExternalManager.getPluginPaths(), fExternalManager.initializeModels(fState.getTargetModels()); if (fState.isCombined()) { IPluginModelBase[] models = fState.getWorkspaceModels(); fState.resolveState(true); } else { fState.resolveState(true);
File file = new File(newBundleURLs[i].getFile()); try { BundleDescription desc = addBundle(file, -1); if (desc != null) descriptions.add(desc); fTargetTimestamp = computeTimestamp(newBundleURLs, fTargetTimestamp); File dir = new File(DIR, Long.toString(fTargetTimestamp) + ".target"); //$NON-NLS-1$ if (!dir.exists()) dir.mkdirs(); fAuxiliaryState.savePluginInfo(dir); saveState(dir); fExtensionRegistry.saveExtensions(fState, dir); resolveState(false);
/** * Creates a new PDE State containing bundles from the given URLs. * * @param target urls of target bundles * @param addResolver whether to add a resolver to the state * @param removeDuplicates whether to remove duplicate conflicting bundles from the state * @param monitor progress monitor */ public PDEState(URL[] target, boolean addResolver, boolean removeDuplicates, IProgressMonitor monitor) { long start = System.currentTimeMillis(); fAuxiliaryState = new PDEAuxiliaryState(); // We no longer try and restore from a cached state as it had no performance benefit createNewTargetState(addResolver, target, monitor); if (removeDuplicates) { removeDuplicatesFromState(fState); } initializePlatformProperties(); createTargetModels(fState.getBundles()); clearOldCache(); if (PDECore.DEBUG_MODEL) System.out.println("Time to create state: " + (System.currentTimeMillis() - start) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$ }
public IPluginModelBase findPluginInHost(String id) { if (registryPlugins == null) { URL[] pluginPaths = ConfiguratorUtils.getCurrentPlatformConfiguration().getPluginPath(); PDEState state = new PDEState(pluginPaths, false, false, new NullProgressMonitor()); registryPlugins = state.getTargetModels(); } for (int i = 0; i < registryPlugins.length; i++) { if (registryPlugins[i].getPluginBase().getId().equals(id)) return registryPlugins[i]; } return null; }
Properties properties = new Properties(); properties.put(Constants.BUNDLE_SYMBOLICNAME, desc.getSymbolicName()); String value = state.getPluginName(id); if (value != null) properties.put(Constants.BUNDLE_NAME, value); value = state.getProviderName(id); if (value != null) properties.put(Constants.BUNDLE_VENDOR, value); value = state.getClassName(id); if (value != null) properties.put(Constants.BUNDLE_ACTIVATOR, value); value = state.getBundleLocalization(id); if (value != null) properties.put(Constants.BUNDLE_LOCALIZATION, value); if (state.hasExtensibleAPI(id)) properties.put(ICoreConstants.EXTENSIBLE_API, "true"); //$NON-NLS-1$ if (state.isPatchFragment(id)) properties.put(ICoreConstants.PATCH_FRAGMENT, "true"); //$NON-NLS-1$ String[] libraries = state.getLibraryNames(id); if (libraries.length > 0) { StringBuffer buffer = new StringBuffer();
private void readTargetState(URL[] urls, IProgressMonitor monitor) { fTargetTimestamp = computeTimestamp(urls); File dir = new File(DIR, Long.toString(fTargetTimestamp) + ".target"); //$NON-NLS-1$ if ((fState = readStateCache(dir)) == null || !fAuxiliaryState.readPluginInfoCache(dir)) { createNewTargetState(true, urls, monitor); if (!dir.exists()) dir.mkdirs(); fAuxiliaryState.savePluginInfo(dir); resolveState(false); saveState(dir); } else { boolean propertiesChanged = initializePlatformProperties(); fState.setResolver(Platform.getPlatformAdmin().getResolver()); if (propertiesChanged) fState.resolve(false); fId = fState.getBundles().length; } if (!fExtensionRegistry.readExtensionsCache(dir)) fExtensionRegistry.saveExtensions(fState, dir); }
PDEState state = new PDEState(allLocations.toArray(new URL[allLocations.size()]), true, false, subMonitor.split(50)); if (subMonitor.isCanceled()) { IPluginModelBase[] models = state.getTargetModels(); List<IPluginModelBase> checkedModels = new ArrayList<>(checkedBundles.length); for (Object checkedBundle : checkedBundles) { implicitIDs.toArray(new String[implicitIDs.size()]), state.getState(), null)); subMonitor.worked(50); };
generator.setDevEntries(url); generator.setPDEState(TargetPlatformHelper.getState()); generator.setNextId(TargetPlatformHelper.getPDEState().getNextId()); generator.setStateExtraData(TargetPlatformHelper.getBundleClasspaths(TargetPlatformHelper.getPDEState()), TargetPlatformHelper.getPatchMap(TargetPlatformHelper.getPDEState()));
fState = new PDEState(new URL[0], true, true, subMon); fExternalManager.setModels(new IPluginModelBase[0]); fEntries = entries; fState = new PDEState(externalUrls, true, true, subMon.split(15)); fExternalManager.setModels(fState.getTargetModels()); addToTable(entries, fExternalManager.getAllModels()); System.out.println(fState.getTargetModels().length + " target models created in " + (System.currentTimeMillis() - startTargetModels) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$ fState.resolveState(true); subMon.worked(5);
public PDEState(URL[] workspace, URL[] target, boolean resolve, IProgressMonitor monitor) { long start = System.currentTimeMillis(); fExtensionRegistry = new PDEExtensionRegistry(); fAuxiliaryState = new PDEAuxiliaryState(); if (resolve) { readTargetState(target, monitor); } else { createNewTargetState(resolve, target, monitor); fExtensionRegistry.createExtensionDocument(fState); } createTargetModels(fState.getBundles()); if (resolve && workspace.length > 0 && !fNewState && !"true".equals(System.getProperty("pde.nocache"))) //$NON-NLS-1$ //$NON-NLS-2$ readWorkspaceState(workspace); fExtensionRegistry.clear(); fAuxiliaryState.clear(); if (DEBUG) System.out.println("Time to create state: " + (System.currentTimeMillis() - start) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$ }
IPluginModelBase[] models = entry.getExternalModels(); for (int i = 0; i < models.length; i++) fState.removeBundleDescription(models[i].getBundleDescription()); fState.addBundle(model, false); ModelEntry hostEntry = (ModelEntry)fEntries.get(host.getName()); if (hostEntry != null) { fState.addBundle(hostEntry.getModel(host), true);
fState.removeBundleDescription(model.getBundleDescription()); if (!entry.hasExternalModels() && !entry.hasWorkspaceModels()) { for (int i = 0; i < external.length; i++) { if (external[i].isEnabled()) fState.addBundleDescription(external[i].getBundleDescription());
&& version.getMinor() == entryVersion.getMinor() && version.getMicro() == entryVersion.getMicro()) { fState.removeBundleDescription(models[i].getBundleDescription()); } else { fState.updateBundleDescription(models[i].getBundleDescription()); fState.addBundle(model, false); ModelEntry hostEntry = entries.get(host.getName()); if (hostEntry != null) { fState.addBundle(hostEntry.getModel(host), true);
/** * Sets the PDE state. This method is meant to be called when the target platform * location changes. * * @param state the new state */ public void resetState(PDEState state) { if (fState != null && fState.equals(state)) return; // clear all models and add new ones int type = IModelProviderEvent.TARGET_CHANGED; IModel[] removed = fState.getTargetModels(); if (removed.length > 0) type |= IModelProviderEvent.MODELS_REMOVED; IModel[] added = state.getTargetModels(); if (added.length > 0) type |= IModelProviderEvent.MODELS_ADDED; modelsChanged(new ModelProviderEvent( state, type, added, removed, new IModel[0])); fireStateChanged(state); }
private void handleReload(String targetLocation, List additionalLocations, Preferences pref, IProgressMonitor monitor) { monitor.beginTask(PDECoreMessages.LoadTargetOperation_reloadTaskName, 85); URL[] paths = getURLs(targetLocation, additionalLocations); PDEState state = new PDEState(paths, true, new SubProgressMonitor(monitor, 45)); ExternalFeatureModelManager featureManager = getFeatureManager(targetLocation, additionalLocations); IFeatureModel[] models = featureManager.getModels(); Map features = new HashMap(); for (int i = 0; i < models.length; i++) features.put(models[i].getFeature().getId(), models[i]); monitor.worked(5); models = PDECore.getDefault().getFeatureModelManager().getWorkspaceModels(); for (int i = 0; i < models.length; i++) features.put(models[i].getFeature().getId(), models[i]); monitor.worked(5); handlePluginSelection(state, features, pref, new SubProgressMonitor(monitor,25)); Job job = new TargetPlatformResetJob(state); job.schedule(); monitor.done(); }
private IPluginModelBase[] createTargetModels(BundleDescription[] bundleDescriptions) { HashMap<String, IPluginModelBase> models = new HashMap<>((4 / 3) * bundleDescriptions.length + 1); for (int i = 0; i < bundleDescriptions.length; i++) { BundleDescription desc = bundleDescriptions[i]; IPluginModelBase base = createExternalModel(desc); fTargetModels.add(base); models.put(desc.getSymbolicName(), base); } if (models.isEmpty()) return new IPluginModelBase[0]; return models.values().toArray(new IPluginModelBase[models.size()]); }
public void load(BundleDescription description, PDEState state) { IPath path = new Path(description.getLocation()); String device = path.getDevice(); if (device != null) path = path.setDevice(device.toUpperCase()); setInstallLocation(path.toOSString()); fLocalization = state.getBundleLocalization(description.getBundleId()); super.load(description, state); }
private void createNewTargetState(boolean resolve, URL[] urls, IProgressMonitor monitor) { fState = stateObjectFactory.createState(resolve); monitor.beginTask(PDECoreMessages.PDEState_CreatingTargetModelState, urls.length); for (int i = 0; i < urls.length; i++) { File file = new File(urls[i].getFile()); try { if (monitor.isCanceled()) // if canceled, stop loading bundles return; monitor.subTask(file.getName()); addBundle(file, -1); } catch (CoreException e) { PDECore.log(e); } finally { monitor.worked(1); } } }
/** * Adds a model to the master table and state * * @param id the key * @param model the model being added */ private void handleAdd(String id, IPluginModelBase model, PluginModelDelta delta) { LocalModelEntry entry = getEntryTable().get(id); // add model to the corresponding ModelEntry. Create a new entry if necessary if (entry == null) { entry = new LocalModelEntry(id); getEntryTable().put(id, entry); delta.addEntry(entry, PluginModelDelta.ADDED); } else { delta.addEntry(entry, PluginModelDelta.CHANGED); } entry.addModel(model); // if the model added is a workspace model, add it to the state and // remove all its external counterparts if (model.getUnderlyingResource() != null) { addWorkspaceBundleToState(model); } else if (model.isEnabled() && !entry.hasWorkspaceModels()) { // if a target model has went from an unchecked state to a checked state // on the target platform preference page, re-add its bundle description // to the state BundleDescription desc = model.getBundleDescription(); if (desc.getContainingState().equals(fState)) fState.addBundleDescription(desc); } }