/** @since 1.2 */ public synchronized Map<String, IAutotoolsOption> getAutotoolsCfgOptions( IProject project, String cfgId) throws CoreException { // Verify project is valid Autotools project if (project == null || !project.hasNature(AutotoolsNewProjectNature.AUTOTOOLS_NATURE_ID)) { throw new CoreException( new Status( IStatus.ERROR, AutotoolsPlugin.PLUGIN_ID, ConfigureMessages.getString(INVALID_AUTOTOOLS_PROJECT))); } // Verify configuration id is valid ICConfigurationDescription cfgd = CoreModel.getDefault().getProjectDescription(project).getConfigurationById(cfgId); IConfiguration icfg = ManagedBuildManager.getConfigurationForDescription(cfgd); if (icfg == null) { throw new CoreException( new Status( IStatus.ERROR, AutotoolsPlugin.PLUGIN_ID, ConfigureMessages.getString(INVALID_AUTOTOOLS_CONFIG_ID))); } IAConfiguration cfg = getConfiguration(project, cfgId); HashMap<String, IAutotoolsOption> options = new HashMap<>(); // Get set of configuration options and convert to set of IAutotoolOptions Map<String, IConfigureOption> cfgOptions = cfg.getOptions(); IAConfiguration dummyCfg = createDefaultConfiguration(createDummyId()); for (Iterator<Entry<String, IConfigureOption>> i = cfgOptions.entrySet().iterator(); i.hasNext(); ) { Map.Entry<String, IConfigureOption> entry = i.next(); String name = entry.getKey(); IAutotoolsOption configOption = new AutotoolsOption(entry.getValue().copy((AutotoolsConfiguration) dummyCfg)); options.put(name, configOption); } return options; }
@Override public void setValue(String value) throws CoreException { if (!canUpdate()) { throw new CoreException( new Status( IStatus.ERROR, AutotoolsPlugin.PLUGIN_ID, ConfigureMessages.getString(UNMODIFIABLE_CONFIG_OPTION))); } synchronized (option) { option.setValue(value); } }
/** @since 1.2 */ public synchronized void updateAutotoolCfgOptions( IProject project, String cfgId, Map<String, IAutotoolsOption> options) throws CoreException { // Verify project is valid Autotools project if (project == null || !project.hasNature(AutotoolsNewProjectNature.AUTOTOOLS_NATURE_ID)) { throw new CoreException( new Status( IStatus.ERROR, AutotoolsPlugin.PLUGIN_ID, ConfigureMessages.getString(INVALID_AUTOTOOLS_PROJECT))); } // Verify configuration id is valid IAConfiguration cfg = findCfg(project, cfgId); if (cfg == null) { throw new CoreException( new Status( IStatus.ERROR, AutotoolsPlugin.PLUGIN_ID, ConfigureMessages.getString(INVALID_AUTOTOOLS_CONFIG_ID))); } // Get set of configuration options and convert to set of IAutotoolOptions for (Iterator<Entry<String, IAutotoolsOption>> i = options.entrySet().iterator(); i.hasNext(); ) { Map.Entry<String, IAutotoolsOption> entry = i.next(); String name = entry.getKey(); IAutotoolsOption option = entry.getValue(); IConfigureOption cfgOption = cfg.getOption(name); if (cfgOption != null) { cfgOption.setValue(option.getValue()); } } // Save changes saveConfigs(project); }
// Perform apply of configuration changes. This rewrites out the current known list of // configurations // with any changes currently that have been made to them. If a configuration has been renamed, // but this // has not yet been confirmed by the end-user, then only the changes to the configuration are // made. The // name currently remains the same in the output file. public synchronized void applyConfigs(String projectName, ICConfigurationDescription[] cfgds) { try { IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); IResource res = root.findMember(projectName, false); if (res == null || res.getType() != IResource.PROJECT) { AutotoolsPlugin.logErrorMessage( ConfigureMessages.getFormattedString(CFG_CANT_SAVE, new String[] {projectName})); return; } IProject project = (IProject) res; IPath output = project.getLocation().append(CFG_FILE_NAME); File f = output.toFile(); if (!f.exists()) f.createNewFile(); if (f.exists()) { try (PrintWriter p = new PrintWriter(new BufferedWriter(new FileWriter(f)))) { Map<String, IAConfiguration> cfgs = getSavedConfigs(project); if (cfgs == null) return; p.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); // $NON-NLS-1$ p.println("<configurations>"); // $NON-NLS-1$ Option[] optionList = AutotoolsConfiguration.getOptionList(); HashSet<String> savedIds = new HashSet<>(); setSyncing(true); for (int x = 0; x < cfgds.length; ++x) { ICConfigurationDescription cfgd = cfgds[x]; @SuppressWarnings("unused") CConfigurationData data = cfgd.getConfigurationData(); String id = cfgd.getId(); savedIds.add(id); IAConfiguration cfg = getTmpConfiguration(project, cfgd); cfgs.put( id, cfg); // add to list in case we have a new configuration not yet added to Project // Description p.println("<configuration id=\"" + id + "\">"); // $NON-NLS-1$ //$NON-NLS-2$ for (int j = 0; j < optionList.length; ++j) { Option option = optionList[j]; IConfigureOption opt = cfg.getOption(option.getName()); if (!opt.isCategory()) p.println( "<option id=\"" + option.getName() + "\" value=\"" + opt.getValue() + "\"/>"); //$NON-NLS-1$ //$NON-NLS-2$ // $NON-NLS-3$ } p.println("</configuration>"); // $NON-NLS-1$ syncNameField(cfgd); } setSyncing(false); // Put all the remaining configurations already saved back into the file. // These represent deleted configurations, but confirmation has not occurred. for (Entry<String, IAConfiguration> i : cfgs.entrySet()) { String id = i.getKey(); // A remaining id won't appear in our savedIds list. if (!savedIds.contains(id)) { IAConfiguration cfg = i.getValue(); p.println("<configuration id=\"" + id + "\">"); // $NON-NLS-1$ //$NON-NLS-2$ for (int j = 0; j < optionList.length; ++j) { Option option = optionList[j]; IConfigureOption opt = cfg.getOption(option.getName()); if (!opt.isCategory()) p.println( "<option id=\"" + option.getName() + "\" value=\"" + opt.getValue() + "\"/>"); //$NON-NLS-1$ //$NON-NLS-2$ // $NON-NLS-3$ } p.println("</configuration>"); // $NON-NLS-1$ } } p.println("</configurations>"); } } } catch (IOException e) { AutotoolsPlugin.log(e); } }