diff -r 413ef834207b spi.editor.hints.projects/apichanges.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/spi.editor.hints.projects/apichanges.xml Fri Aug 02 09:14:58 2013 +0200 @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + Editor Hints Bridge + + + + + + + + + Adding support method to create hints' ProjectSettings from project's Preferences + + + + + + Support method to create hints' ProjectSettings from project's Preferences added. + + + + + + + + + + + + + Change History for the Editor Hints SPI + + + + + + +

Introduction

+ +

This document lists changes made to the Editor Hints SPI.

+ + +
+ + +

@FOOTER@

+ + +
+ +
diff -r 413ef834207b spi.editor.hints.projects/nbproject/project.properties --- a/spi.editor.hints.projects/nbproject/project.properties Fri Aug 02 00:36:10 2013 +0000 +++ b/spi.editor.hints.projects/nbproject/project.properties Fri Aug 02 09:14:58 2013 +0200 @@ -1,5 +1,6 @@ javac.source=1.7 javac.compilerargs=-Xlint -Xlint:-serial javadoc.arch=${basedir}/arch.xml -spec.version.base=1.3.0 +javadoc.apichanges=${basedir}/apichanges.xml +spec.version.base=1.4.0 spec.version.base.fatal.warning=false diff -r 413ef834207b spi.editor.hints.projects/src/org/netbeans/modules/editor/hints/projects/layer.xml --- a/spi.editor.hints.projects/src/org/netbeans/modules/editor/hints/projects/layer.xml Fri Aug 02 00:36:10 2013 +0000 +++ b/spi.editor.hints.projects/src/org/netbeans/modules/editor/hints/projects/layer.xml Fri Aug 02 09:14:58 2013 +0200 @@ -18,5 +18,21 @@ + + + + + + + + + + + + + + + + diff -r 413ef834207b spi.editor.hints.projects/src/org/netbeans/spi/editor/hints/projects/PerProjectHintsPanelUI.java --- a/spi.editor.hints.projects/src/org/netbeans/spi/editor/hints/projects/PerProjectHintsPanelUI.java Fri Aug 02 00:36:10 2013 +0000 +++ b/spi.editor.hints.projects/src/org/netbeans/spi/editor/hints/projects/PerProjectHintsPanelUI.java Fri Aug 02 09:14:58 2013 +0200 @@ -199,7 +199,9 @@ } private void searchEnableDisable() { - searchText.setEnabled(supportsFiltering.contains(((LanguageDescription) languageCombo.getSelectedItem()).mimeType)); + LanguageDescription selected = (LanguageDescription) languageCombo.getSelectedItem(); + + searchText.setEnabled(selected != null && supportsFiltering.contains(selected.mimeType)); } /** diff -r 413ef834207b spi.editor.hints.projects/src/org/netbeans/spi/editor/hints/projects/support/ProjectCustomizer.java --- a/spi.editor.hints.projects/src/org/netbeans/spi/editor/hints/projects/support/ProjectCustomizer.java Fri Aug 02 00:36:10 2013 +0000 +++ b/spi.editor.hints.projects/src/org/netbeans/spi/editor/hints/projects/support/ProjectCustomizer.java Fri Aug 02 09:14:58 2013 +0200 @@ -46,6 +46,7 @@ import java.io.IOException; import javax.swing.JComponent; import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectManager; import org.netbeans.modules.editor.tools.storage.api.ToolPreferences; import org.netbeans.spi.editor.hints.projects.ProjectSettings; import org.netbeans.spi.editor.hints.projects.support.StandardProjectSettings.Standard; @@ -83,7 +84,7 @@ @Override public JComponent createComponent(Category category, Lookup context) { - Project prj = context.lookup(Project.class); + final Project prj = context.lookup(Project.class); assert prj != null; @@ -91,7 +92,6 @@ final ToolPreferences[] toSave = new ToolPreferences[1]; - //TODO: should rather use store listener to avoid touching disk in AWT category.setOkButtonListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { toSave[0] = settingsPanel.commit(); @@ -105,6 +105,8 @@ toSave[0].save(); toSave[0] = null; } + + ProjectManager.getDefault().saveProject(prj); } catch (IOException ex) { Exceptions.printStackTrace(ex); } diff -r 413ef834207b spi.editor.hints.projects/src/org/netbeans/spi/editor/hints/projects/support/ProjectHintSettingPanel.java --- a/spi.editor.hints.projects/src/org/netbeans/spi/editor/hints/projects/support/ProjectHintSettingPanel.java Fri Aug 02 00:36:10 2013 +0000 +++ b/spi.editor.hints.projects/src/org/netbeans/spi/editor/hints/projects/support/ProjectHintSettingPanel.java Fri Aug 02 09:14:58 2013 +0200 @@ -47,9 +47,12 @@ import java.awt.Container; import java.io.IOException; import java.util.logging.Logger; +import java.util.prefs.Preferences; import javax.swing.JComponent; import org.netbeans.api.options.OptionsDisplayer; import org.netbeans.modules.editor.tools.storage.api.ToolPreferences; +import org.netbeans.spi.editor.hints.projects.PerProjectHintsPanel.MimeType2Preferences; +import org.netbeans.spi.editor.hints.projects.ProjectSettings; import org.netbeans.spi.editor.hints.projects.support.StandardProjectSettings.Standard; import org.openide.DialogDescriptor; import org.openide.DialogDisplayer; @@ -69,12 +72,13 @@ private final JComponent panelUI; private final Standard projectSettings; private String settingsFileLocation; - private ToolPreferences perProjectToolPreferences; + private MimeType2Preferences perProjectPreferences; + private ToolPreferences toolPreferences; public ProjectHintSettingPanel(final Standard projectSettings, String customizersFolderLocation) { this.projectSettings = projectSettings; - this.settingsFileLocation = projectSettings.getSettingsFileLocation(); - this.perProjectToolPreferences = projectSettings.preferencesFrom(settingsFileLocation); + this.settingsFileLocation = projectSettings.hasLocation() ? projectSettings.getSettingsFileLocation() : null; + settingsFileLocationChanged(); FileObject customizersFolder; try { @@ -86,6 +90,7 @@ panel = PerProjectHintsPanel.create(customizersFolder); initComponents(); + advanced.setVisible(projectSettings.hasLocation()); if (projectSettings.getUseProjectSettings()) { useProjectSettings.setSelected(true); } else { @@ -103,7 +108,7 @@ advanced.setEnabled(useProjectSettings.isSelected()); if (useProjectSettings.isSelected()) { - panel.setPerProjectSettings(perProjectToolPreferences); + panel.setPerProjectSettings(perProjectPreferences); } else { panel.setGlobalSettings(); } @@ -122,7 +127,7 @@ projectSettings.setUseProjectSettings(useProjectSettings.isSelected()); // projectSettings.setSettingsFileLocation(new File(settingsFileLocation.getText())); panel.applyChanges(); - return useProjectSettings.isSelected() ? perProjectToolPreferences : null; + return useProjectSettings.isSelected() && toolPreferences != null ? toolPreferences : null; } /** @@ -231,7 +236,8 @@ DialogDescriptor dd = new DialogDescriptor(panel, Bundle.CAP_ProjectSpecificOptions(), true, DialogDescriptor.OK_CANCEL_OPTION, DialogDescriptor.OK_OPTION, null); if (DialogDisplayer.getDefault().notify(dd) == DialogDescriptor.OK_OPTION) { - this.perProjectToolPreferences = projectSettings.preferencesFrom(settingsFileLocation = panel.getHintFileLocation()); + settingsFileLocation = panel.getHintFileLocation(); + settingsFileLocationChanged(); settingsOriginChanged(); } }//GEN-LAST:event_advancedActionPerformed @@ -240,6 +246,22 @@ OptionsDisplayer.getDefault().open("Editor/Hints"); }//GEN-LAST:event_globalSettingsActionPerformed + private void settingsFileLocationChanged() { + if (projectSettings.hasLocation()) { + final ToolPreferences toolPreferencesFin = toolPreferences = projectSettings.preferencesFrom(settingsFileLocation); + perProjectPreferences = new MimeType2Preferences() { + @Override public Preferences getPreferences(String mimeType) { + return toolPreferencesFin.getPreferences(ProjectSettings.HINTS_TOOL_ID, mimeType); + } + }; + } else { + perProjectPreferences = new MimeType2Preferences() { + @Override public Preferences getPreferences(String mimeType) { + return projectSettings.getProjectSettings(mimeType); + } + }; + } + } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton advanced; private javax.swing.JButton globalSettings; diff -r 413ef834207b spi.editor.hints.projects/src/org/netbeans/spi/editor/hints/projects/support/StandardProjectSettings.java --- a/spi.editor.hints.projects/src/org/netbeans/spi/editor/hints/projects/support/StandardProjectSettings.java Fri Aug 02 00:36:10 2013 +0000 +++ b/spi.editor.hints.projects/src/org/netbeans/spi/editor/hints/projects/support/StandardProjectSettings.java Fri Aug 02 09:14:58 2013 +0200 @@ -124,6 +124,21 @@ }; } + /**Augment the given project's {@link Lookup} with the per-project hints settings. + * + * @return a {@link LookupProvider} that augments the given project's {@link Lookup} with per-project settings + * @since 1.4 + */ + public static @NonNull LookupProvider createPreferencesBasedSettings() { + return new LookupProvider() { + @Override public Lookup createAdditionalLookup(Lookup baseContext) { + Project project = baseContext.lookup(Project.class); + assert project != null; + return Lookups.fixed(new Standard(project, KEY_USE_PROJECT, null, null)); + } + }; + } + /**Augments the project's customizer with the standard version of per-project hints customizer. * Similar to {@link #createCustomizerProvider(java.lang.String) }, but the customizersFolder * is read get from customizersFolder attribute of the given file. Intended to be put directly @@ -160,11 +175,11 @@ private final Project project; - private final String keyUseProject; - private final String keyHintSettingsFile; - private final String defaultHintLocation; + private final @NonNull String keyUseProject; + private final @NullAllowed String keyHintSettingsFile; + private final @NullAllowed String defaultHintLocation; - public Standard(Project project, String keyUseProject, String keyHintSettingsFile, String defaultHintLocation) { + public Standard(Project project, @NonNull String keyUseProject, @NullAllowed String keyHintSettingsFile, @NullAllowed String defaultHintLocation) { this.keyUseProject = keyUseProject; this.keyHintSettingsFile = keyHintSettingsFile; this.defaultHintLocation = defaultHintLocation; @@ -185,22 +200,29 @@ } public String getSettingsFileLocation() { + assert hasLocation(); String result = ProjectUtils.getPreferences(project, ProjectSettings.class, true).get(keyHintSettingsFile, null); return result != null ? result : defaultHintLocation; } public void setSettingsFileLocation(String settings) { + assert hasLocation(); ProjectUtils.getPreferences(project, ProjectSettings.class, true).put(keyHintSettingsFile, settings); } @Override public Preferences getProjectSettings(String mimeType) { - URI settingsLocation = project.getProjectDirectory().toURI().resolve(getSettingsFileLocation()); - return ToolPreferences.from(settingsLocation).getPreferences(HINTS_TOOL_ID, mimeType); + if (hasLocation()) { + URI settingsLocation = project.getProjectDirectory().toURI().resolve(getSettingsFileLocation()); + return ToolPreferences.from(settingsLocation).getPreferences(HINTS_TOOL_ID, mimeType); + } else { + return ProjectUtils.getPreferences(project, ProjectSettings.class, true).node(mimeType); + } } public ToolPreferences preferencesFrom(String source) { + assert hasLocation(); URI settingsLocation = project.getProjectDirectory().toURI().resolve(getSettingsFileLocation()); return ToolPreferences.from(settingsLocation); } @@ -213,5 +235,14 @@ return FileUtil.toFile(project.getProjectDirectory()); } + public boolean hasLocation() { + return keyHintSettingsFile != null; + } + + public void save() { + if (hasLocation()) { + + } + } } }