Cleaning up preferences-related code.
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPath_parse_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/DirectoryPath_parse_Test.java similarity index 89% rename from com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPath_parse_Test.java rename to com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/DirectoryPath_parse_Test.java index 7dc12eb..3cbd0e4 100644 --- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPath_parse_Test.java +++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/DirectoryPath_parse_Test.java
@@ -6,13 +6,15 @@ * * http://www.eclipse.org/legal/epl-v10.html */ -package com.google.eclipse.protobuf.ui.preferences.paths; +package com.google.eclipse.protobuf.ui.preferences.pages.paths; import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.assertThat; import org.junit.Test; +import com.google.eclipse.protobuf.ui.preferences.pages.paths.DirectoryPath; + /** * Tests for <code>{@link DirectoryPath#parse(String)}</code> *
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPath_toString_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/DirectoryPath_toString_Test.java similarity index 88% rename from com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPath_toString_Test.java rename to com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/DirectoryPath_toString_Test.java index c387983..750272d 100644 --- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPath_toString_Test.java +++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/DirectoryPath_toString_Test.java
@@ -6,13 +6,15 @@ * * http://www.eclipse.org/legal/epl-v10.html */ -package com.google.eclipse.protobuf.ui.preferences.paths; +package com.google.eclipse.protobuf.ui.preferences.pages.paths; import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.assertThat; import org.junit.Test; +import com.google.eclipse.protobuf.ui.preferences.pages.paths.DirectoryPath; + /** * Tests for <code>{@link DirectoryPath#toString()}</code> *
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable_useProjectName_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/ProjectVariable_useProjectName_Test.java similarity index 91% rename from com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable_useProjectName_Test.java rename to com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/ProjectVariable_useProjectName_Test.java index d03094f..13c59db 100644 --- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable_useProjectName_Test.java +++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/ProjectVariable_useProjectName_Test.java
@@ -6,13 +6,13 @@ * * http://www.eclipse.org/legal/epl-v10.html */ -package com.google.eclipse.protobuf.ui.preferences.paths; +package com.google.eclipse.protobuf.ui.preferences.pages.paths; import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.*; -import com.google.eclipse.protobuf.ui.preferences.paths.ProjectVariable; +import com.google.eclipse.protobuf.ui.preferences.pages.paths.ProjectVariable; import org.eclipse.core.resources.IProject; import org.junit.*;
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable_useProjectVariable_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/ProjectVariable_useProjectVariable_Test.java similarity index 92% rename from com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable_useProjectVariable_Test.java rename to com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/ProjectVariable_useProjectVariable_Test.java index 36fed91..96c9c7d 100644 --- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable_useProjectVariable_Test.java +++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/ProjectVariable_useProjectVariable_Test.java
@@ -6,13 +6,13 @@ * * http://www.eclipse.org/legal/epl-v10.html */ -package com.google.eclipse.protobuf.ui.preferences.paths; +package com.google.eclipse.protobuf.ui.preferences.pages.paths; import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.*; -import com.google.eclipse.protobuf.ui.preferences.paths.ProjectVariable; +import com.google.eclipse.protobuf.ui.preferences.pages.paths.ProjectVariable; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.*;
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver_resolveUri_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver_resolveUri_Test.java index 6ec8b87..737370f 100644 --- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver_resolveUri_Test.java +++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver_resolveUri_Test.java
@@ -17,7 +17,7 @@ import org.eclipse.emf.common.util.URI; import org.junit.*; -import com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferences; +import com.google.eclipse.protobuf.ui.preferences.pages.paths.PathsPreferences; import com.google.eclipse.protobuf.ui.util.Resources; /**
diff --git a/com.google.eclipse.protobuf.ui/plugin.xml b/com.google.eclipse.protobuf.ui/plugin.xml index 7f6628a..ee1e0c4 100644 --- a/com.google.eclipse.protobuf.ui/plugin.xml +++ b/com.google.eclipse.protobuf.ui/plugin.xml
@@ -48,7 +48,7 @@ </extension> <extension point="org.eclipse.ui.preferencePages"> <page - class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.general.GeneralSettingsPreferencePage" + class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.pages.general.GeneralSettingsPreferencePage" id="com.google.eclipse.protobuf.Protobuf" name="%page.name"> <keywordReference id="com.google.eclipse.protobuf.ui.keyword_Protobuf" /> </page> @@ -57,14 +57,14 @@ id="com.google.eclipse.protobuf.Protobuf.coloring" name="%page.name.0"> <keywordReference id="com.google.eclipse.protobuf.ui.keyword_Protobuf" /> </page> - <page category="com.google.eclipse.protobuf.Protobuf" + <!--page category="com.google.eclipse.protobuf.Protobuf" class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:org.eclipse.xtext.ui.editor.templates.XtextTemplatePreferencePage" id="com.google.eclipse.protobuf.Protobuf.templates" name="%page.name.1"> <keywordReference id="com.google.eclipse.protobuf.ui.keyword_Protobuf" /> - </page> + </page--> <page category="com.google.eclipse.protobuf.Protobuf" - class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.compiler.CompilerPreferencePage" - id="com.google.eclipse.protobuf.ui.preferences.compiler.CompilerPreferencePage" name="%page.name.2"> + class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.pages.compiler.CompilerPreferencePage" + id="com.google.eclipse.protobuf.ui.preferences.pages.compiler.CompilerPreferencePage" name="%page.name.2"> <keywordReference id="com.google.eclipse.protobuf.ui.keyword_Protobuf" /> </page> </extension> @@ -161,20 +161,20 @@ </extension> <extension point="org.eclipse.ui.propertyPages"> <page - class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.general.GeneralSettingsPreferencePage" + class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.pages.general.GeneralSettingsPreferencePage" id="com.google.eclipse.protobuf.Protobuf" name="%page.name" selectionFilter="single"> </page> <page category="com.google.eclipse.protobuf.Protobuf" - class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.compiler.CompilerPreferencePage" + class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.pages.compiler.CompilerPreferencePage" id="com.google.eclipse.protobuf.ui.properties.compiler.PropertyPage" name="%page.name.2" selectionFilter="single"> </page> <page category="com.google.eclipse.protobuf.Protobuf" - class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferencePage" + class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.pages.paths.PathsPreferencePage" id="com.google.eclipse.protobuf.ui.properties.paths.PropertyPage" name="%page.name.3" selectionFilter="single">
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/OutputDirectories.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/OutputDirectories.java index a2b2214..884c12e 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/OutputDirectories.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/OutputDirectories.java
@@ -24,17 +24,17 @@ private final Map<SupportedLanguage, IFolder> outputDirectories = new HashMap<SupportedLanguage, IFolder>(); - static OutputDirectories findOrCreateOutputDirectories(IProject project, List<CodeGeneration> preferences) + static OutputDirectories findOrCreateOutputDirectories(IProject project, CodeGenerationSettings preferences) throws CoreException { Map<SupportedLanguage, IFolder> outputDirectories = new HashMap<SupportedLanguage, IFolder>(); - for (CodeGeneration preference : preferences) { + for (CodeGenerationSetting preference : preferences.allSettings()) { if (!preference.isEnabled()) continue; outputDirectories.put(preference.language(), findOrCreateOutputDirectory(project, preference)); } return new OutputDirectories(outputDirectories); } - private static IFolder findOrCreateOutputDirectory(IProject project, CodeGeneration preference) + private static IFolder findOrCreateOutputDirectory(IProject project, CodeGenerationSetting preference) throws CoreException { return findOrCreateOutputDirectory(project, preference.outputDirectory()); }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtobufBuildParticipant.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtobufBuildParticipant.java index d690534..e99e78e 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtobufBuildParticipant.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtobufBuildParticipant.java
@@ -41,7 +41,7 @@ @Inject private ProtocOutputParser outputParser; @Inject private ProtocCommandFactory commandFactory; @Inject private CompilerPreferencesProvider compilerPreferencesProvider; - @Inject private PathsPreferencesProvider pathsPreferencesProvider; + @Inject private PathsPreferencesFactory pathsPreferencesFactory; public void build(IBuildContext context, IProgressMonitor monitor) throws CoreException { IProject project = context.getBuiltProject(); @@ -49,7 +49,7 @@ if (!preferences.shouldCompileProtoFiles()) return; List<Delta> deltas = context.getDeltas(); if (deltas.isEmpty()) return; - OutputDirectories outputDirectories = findOrCreateOutputDirectories(project, preferences.codeGenerationOptions()); + OutputDirectories outputDirectories = findOrCreateOutputDirectories(project, preferences.codeGenerationSettings()); List<String> importRoots = importRoots(project); for (Delta d : deltas) { IResourceDescription newResource = d.getNew(); @@ -63,7 +63,7 @@ private List<String> importRoots(IProject project) { List<String> paths = new ArrayList<String>(); - PathsPreferences preferences = pathsPreferencesProvider.getPreferences(project); + PathsPreferences preferences = pathsPreferencesFactory.preferences(project); List<DirectoryPath> directoryPaths = preferences.importRoots(); for (DirectoryPath path : directoryPaths) { String location = locationOfDirectory(path, project);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/BooleanPreference.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/BooleanPreference.java new file mode 100644 index 0000000..099ea37 --- /dev/null +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/BooleanPreference.java
@@ -0,0 +1,48 @@ +/* + * Copyright (c) 2011 Google Inc. + * + * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse + * Public License v1.0 which accompanies this distribution, and is available at + * + * http://www.eclipse.org/legal/epl-v10.html + */ +package com.google.eclipse.protobuf.ui.preferences; + +import org.eclipse.jface.preference.IPreferenceStore; + +/** + * A preference that stores a {@code boolean} value. + * + * @author alruiz@google.com (Alex Ruiz) + */ +public class BooleanPreference extends Preference<Boolean> { + + /** + * Creates a new </code>{@link BooleanPreference}</code>. + * @param name the name of this preference. + * @param store the store for this preference. + */ + public BooleanPreference(String name, IPreferenceStore store) { + super(name, store); + } + + /** {@inheritDoc} */ + @Override public Boolean value() { + return store.getBoolean(name); + } + + /** {@inheritDoc} */ + @Override public Boolean defaultValue() { + return store.getDefaultBoolean(name); + } + + /** {@inheritDoc} */ + @Override public void value(Boolean value) { + store.setValue(name, value); + } + + /** {@inheritDoc} */ + @Override public void defaultValue(Boolean value) { + store.setDefault(name, value); + } +}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/Preference.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/Preference.java new file mode 100644 index 0000000..cd3fec5 --- /dev/null +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/Preference.java
@@ -0,0 +1,57 @@ +/* + * Copyright (c) 2011 Google Inc. + * + * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse + * Public License v1.0 which accompanies this distribution, and is available at + * + * http://www.eclipse.org/legal/epl-v10.html + */ +package com.google.eclipse.protobuf.ui.preferences; + +import org.eclipse.jface.preference.IPreferenceStore; + +/** + * A single preference value. + * @param <T> the type of value this preference handles. + * + * @author alruiz@google.com (Alex Ruiz) + */ +public abstract class Preference<T> { + + protected final String name; + protected final IPreferenceStore store; + + /** + * Creates a new </code>{@link Preference}</code>. + * @param name the name of this preference. + * @param store the store for this preference. + */ + public Preference(String name, IPreferenceStore store) { + this.name = name; + this.store = store; + } + + /** + * Returns the value of this preference. + * @return the value of this preference. + */ + public abstract T value(); + + /** + * Returns the default value of this preference. + * @return the default value of this preference. + */ + public abstract T defaultValue(); + + /** + * Saves the value of this preference to the given store. + * @param value the value to save. + */ + public abstract void value(T value); + + /** + * Saves the default value of this preference to the given store. + * @param value the default value to save. + */ + public abstract void defaultValue(T value); +}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/StringPreference.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/StringPreference.java new file mode 100644 index 0000000..d62d429 --- /dev/null +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/StringPreference.java
@@ -0,0 +1,48 @@ +/* + * Copyright (c) 2011 Google Inc. + * + * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse + * Public License v1.0 which accompanies this distribution, and is available at + * + * http://www.eclipse.org/legal/epl-v10.html + */ +package com.google.eclipse.protobuf.ui.preferences; + +import org.eclipse.jface.preference.IPreferenceStore; + +/** + * A preference that stores a {@code String} value. + * + * @author alruiz@google.com (Alex Ruiz) + */ +public class StringPreference extends Preference<String> { + + /** + * Creates a new </code>{@link StringPreference}</code>. + * @param name the name of this preference. + * @param store the store for this preference. + */ + public StringPreference(String name, IPreferenceStore store) { + super(name, store); + } + + /** {@inheritDoc} */ + @Override public String value() { + return store.getString(name); + } + + /** {@inheritDoc} */ + @Override public String defaultValue() { + return store.getDefaultString(name); + } + + /** {@inheritDoc} */ + @Override public void value(String value) { + store.setValue(name, value); + } + + /** {@inheritDoc} */ + @Override public void defaultValue(String value) { + store.setDefault(name, value); + } +}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/Binding.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/Binding.java index bf52b15..feffdfb 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/Binding.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/Binding.java
@@ -9,35 +9,26 @@ package com.google.eclipse.protobuf.ui.preferences.binding; import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.swt.widgets.Control; /** - * Binds a value from a <code>{@link IPreferenceStore}</code> to the selection of a - * <code>{@link Control}</code>. + * Binds a value from a <code>{@link IPreferenceStore}</code> to an object. * * @author alruiz@google.com (Alex Ruiz) */ public interface Binding { /** - * Reads a preference from the given <code>{@link IPreferenceStore}</code> and applies it to this binding's - * <code>{@link Control}</code>. - * @param store the preference store. + * Reads a preference value and applies it to this binding's target object. */ - void read(IPreferenceStore store); + void applyPreferenceValueToTarget(); /** - * Reads a default value preference from the given <code>{@link IPreferenceStore}</code> and applies it to the this - * binding's <code>{@link Control}</code>. - * @param store the preference store. + * Reads a default value preference and applies it to the this binding's target object. */ - void readDefault(IPreferenceStore store); + void applyDefaultPreferenceValueToTarget(); /** - * Applies the value of this binding's <code>{@link Control}</code> to a preference in the given - * <code>{@link IPreferenceStore}</code>. - * @param store the preference store. + * Applies the value of this binding's target object to a preference. */ - void save(IPreferenceStore store); - + void savePreferenceValue(); }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/BindingToButtonSelection.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/BindingToButtonSelection.java new file mode 100644 index 0000000..c39b4e3 --- /dev/null +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/BindingToButtonSelection.java
@@ -0,0 +1,78 @@ +/* + * Copyright (c) 2011 Google Inc. + * + * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse + * Public License v1.0 which accompanies this distribution, and is available at + * + * http://www.eclipse.org/legal/epl-v10.html + */ +package com.google.eclipse.protobuf.ui.preferences.binding; + +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.swt.widgets.Button; + +import com.google.eclipse.protobuf.ui.preferences.BooleanPreference; + +/** + * Binds a {@code boolean} value from a <code>{@link IPreferenceStore}</code> to the selection of a + * <code>{@link Button}</code>. + * + * @author alruiz@google.com (Alex Ruiz) + */ +public class BindingToButtonSelection implements Binding { + + private final Button button; + private final BooleanPreference preference; + + public static BindingBuilder bindSelectionOf(Button button) { + return new BindingBuilder(button); + } + + /** + * Creates a new </code>{@link BindingToButtonSelection}</code>. + * @param button the control to bind to the preference. + * @param preference the given preference. + */ + private BindingToButtonSelection(Button button, BooleanPreference preference) { + this.preference = preference; + this.button = button; + } + + /** {@inheritDoc} */ + public void applyPreferenceValueToTarget() { + boolean value = preference.value(); + button.setSelection(value); + } + + /** {@inheritDoc} */ + public void applyDefaultPreferenceValueToTarget() { + boolean value = preference.defaultValue(); + button.setSelection(value); + } + + /** {@inheritDoc} */ + public void savePreferenceValue() { + preference.value(button.getSelection()); + } + + public static class BindingBuilder { + private final Button button; + + /** + * Creates a new </code>{@link BindingBuilder}</code>. + * @param button the button whose selection will be bound to a preference value. + */ + public BindingBuilder(Button button) { + this.button = button; + } + + /** + * Creates a new <code>{@link BindingToButtonSelection}</code>. + * @param preference the preference to bind to the selection of this builder's button. + * @return the created binding. + */ + public BindingToButtonSelection to(BooleanPreference preference) { + return new BindingToButtonSelection(button, preference); + } + } +}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/BindingToTextValue.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/BindingToTextValue.java new file mode 100644 index 0000000..92c2e5b --- /dev/null +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/BindingToTextValue.java
@@ -0,0 +1,78 @@ +/* + * Copyright (c) 2011 Google Inc. + * + * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse + * Public License v1.0 which accompanies this distribution, and is available at + * + * http://www.eclipse.org/legal/epl-v10.html + */ +package com.google.eclipse.protobuf.ui.preferences.binding; + +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.swt.widgets.Text; + +import com.google.eclipse.protobuf.ui.preferences.StringPreference; + +/** + * Binds a {@code boolean} value from a <code>{@link IPreferenceStore}</code> to the value of a + * <code>{@link Text}</code>. + * + * @author alruiz@google.com (Alex Ruiz) + */ +public class BindingToTextValue implements Binding { + + private final Text text; + private final StringPreference preference; + + public static BindingBuilder bindTextOf(Text text) { + return new BindingBuilder(text); + } + + /** + * Creates a new </code>{@link BindingToTextValue}</code>. + * @param text the control to bind to the preference. + * @param preference the given preference. + */ + private BindingToTextValue(Text text, StringPreference preference) { + this.text = text; + this.preference = preference; + } + + /** {@inheritDoc} */ + public void applyPreferenceValueToTarget() { + String value = preference.value(); + text.setText(value); + } + + /** {@inheritDoc} */ + public void applyDefaultPreferenceValueToTarget() { + String value = preference.defaultValue(); + text.setText(value); + } + + /** {@inheritDoc} */ + public void savePreferenceValue() { + preference.value(text.getText()); + } + + public static class BindingBuilder { + private final Text text; + + /** + * Creates a new </code>{@link BindingBuilder}</code>. + * @param text the text whose value will be bound to a preference value. + */ + public BindingBuilder(Text text) { + this.text = text; + } + + /** + * Creates a new <code>{@link BindingToTextValue}</code>. + * @param preference the preference to bind to the value of this builder's text. + * @return the created binding. + */ + public BindingToTextValue to(StringPreference preference) { + return new BindingToTextValue(text, preference); + } + } +}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/PreferenceBinder.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/PreferenceBinder.java index b31b6d5..d058473 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/PreferenceBinder.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/PreferenceBinder.java
@@ -10,9 +10,6 @@ import java.util.*; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.swt.widgets.Button; - /** * Binds preferences to UI controls. * @@ -20,31 +17,31 @@ */ public class PreferenceBinder { - private final List<Binding> bindings = new ArrayList<Binding>(); + private final List<Binding> allBindings = new ArrayList<Binding>(); - public void bind(String preferenceName, Button button) { - add(new PreferenceToButtonBinding(preferenceName, button)); + public void addAll(Binding...bindings) { + for (Binding binding : bindings) add(binding); } public void add(Binding binding) { - bindings.add(binding); + allBindings.add(binding); } - public void readPreferences(IPreferenceStore store) { - for (Binding binding : bindings) { - binding.read(store); + public void applyValues() { + for (Binding binding : allBindings) { + binding.applyPreferenceValueToTarget(); } } - public void readDefaultPreferences(IPreferenceStore store) { - for (Binding binding : bindings) { - binding.readDefault(store); + public void applyDefaults() { + for (Binding binding : allBindings) { + binding.applyDefaultPreferenceValueToTarget(); } } - public void savePreferences(IPreferenceStore store) { - for (Binding binding : bindings) { - binding.save(store); + public void saveValues() { + for (Binding binding : allBindings) { + binding.savePreferenceValue(); } } }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/PreferenceToButtonBinding.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/PreferenceToButtonBinding.java deleted file mode 100644 index f3eee93..0000000 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/PreferenceToButtonBinding.java +++ /dev/null
@@ -1,63 +0,0 @@ -/* - * Copyright (c) 2011 Google Inc. - * - * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse - * Public License v1.0 which accompanies this distribution, and is available at - * - * http://www.eclipse.org/legal/epl-v10.html - */ -package com.google.eclipse.protobuf.ui.preferences.binding; - -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.swt.widgets.Button; - -/** - * Binds a {@code boolean} value from a <code>{@link IPreferenceStore}</code> to the selection of a - * <code>{@link Button}</code>. - * - * @author alruiz@google.com (Alex Ruiz) - */ -public class PreferenceToButtonBinding implements Binding { - - private final String preferenceName; - private final Button button; - - /** - * Creates a new </code>{@link PreferenceToButtonBinding}</code>. - * @param preferenceName the name of the preference to read/write. - * @param button the control to bind to the preference. - */ - public PreferenceToButtonBinding(String preferenceName, Button button) { - this.preferenceName = preferenceName; - this.button = button; - } - - /** - * Reads a {@code boolean} preference from the given <code>{@link IPreferenceStore}</code> and applies it to the - * selection of this binding's button. - * @param store the preference store. - */ - public void read(IPreferenceStore store) { - boolean value = store.getBoolean(preferenceName); - button.setSelection(value); - } - - /** - * Reads the default {@code boolean} preference value from the given <code>{@link IPreferenceStore}</code> and applies - * it to the selection of this binding's button. - * @param store the preference store. - */ - public void readDefault(IPreferenceStore store) { - boolean value = store.getDefaultBoolean(preferenceName); - button.setSelection(value); - } - - /** - * Applies the value of the selection of this binding's button to a preference in the given - * <code>{@link IPreferenceStore}</code>. - * @param store the preference store. - */ - public void save(IPreferenceStore store) { - store.setValue(preferenceName, button.getSelection()); - } -}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/PreferenceAndPropertyPage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/PreferenceAndPropertyPage.java index bfdc354..6105f8b 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/PreferenceAndPropertyPage.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/PreferenceAndPropertyPage.java
@@ -23,6 +23,7 @@ import org.eclipse.ui.*; import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess; +import com.google.eclipse.protobuf.ui.preferences.binding.PreferenceBinder; import com.google.inject.Inject; /** @@ -32,7 +33,8 @@ */ public abstract class PreferenceAndPropertyPage extends PreferencePage implements IWorkbenchPreferencePage, IWorkbenchPropertyPage { - private Button btnEnableProjectSettings; + protected Button btnEnableProjectSettings; + private Link lnkEnableWorkspaceSettings; private IProject project; @@ -40,13 +42,29 @@ @Inject private IPreferenceStoreAccess preferenceStoreAccess; + private final PreferenceBinder preferenceBinder = new PreferenceBinder(); + + @Override protected final Control createContents(Composite parent) { + Composite contents = contentParent(parent); + doCreateContents(contents); + setupBinding(preferenceBinder); + preferenceBinder.applyValues(); + onPageCreation(); + return contents; + } + /** - * Creates the <code>{@link Composite}</code> that contains the options to switch between "Project" and "Workspace" - * settings. + * Creates the <code>{@link Composite}</code> that will contain all the UI controls in this preference page. By + * default it returns a <code>{@link Composite}</code> that contains the options to switch between "Project" and + * "Workspace" settings. * @param parent the parent {@code Composite}. * @return the created {@code Composite}. */ - protected final Composite switchBetweenProjectAndWorkspaceSettings(Composite parent) { + protected Composite contentParent(Composite parent) { + return switchBetweenProjectAndWorkspaceSettings(parent); + } + + private Composite switchBetweenProjectAndWorkspaceSettings(Composite parent) { // generated by WindowBuilder Composite contents = new Composite(parent, NONE); contents.setLayout(new GridLayout(3, false)); @@ -94,6 +112,21 @@ } /** + * Creates the contents of this preference page. + * @param parent the parent {@code Composite}. + */ + protected abstract void doCreateContents(Composite parent); + + /** + * Sets up data binding. + * @param preferenceBinder the preference binder; + */ + protected abstract void setupBinding(PreferenceBinder preferenceBinder); + + /** Method invoked after the page has been created. By default this method does nothing. */ + protected void onPageCreation() {} + + /** * Returns the id of this preference page. * @return the id of this preference page. */ @@ -170,30 +203,24 @@ public void init(IWorkbench workbench) {} @Override public final boolean performOk() { - savePreferences(getPreferenceStore()); + preferenceBinder.saveValues(); + okPerformed(); return true; } - /** - * Saves the current settings. - * @param store the preference store used by this page. - */ - protected abstract void savePreferences(IPreferenceStore store); + /** Method invoked after this page's defaults have been saved. By default this method does nothing. */ + protected void okPerformed() {} @Override protected final void performDefaults() { - performDefaults(getPreferenceStore()); + preferenceBinder.applyDefaults(); + defaultsPerformed(); super.performDefaults(); } - /** - * Performs special processing when this page's "Defaults" button has been pressed. - * @param store the preference store used by this page. - */ - protected abstract void performDefaults(IPreferenceStore store); + /** Method invoked after this page's defaults have been processed. By default this method does nothing. */ + protected void defaultsPerformed() {} - /** - * Marks this page as "valid." - */ + /** Marks this page as "valid." */ protected final void pageIsNowValid() { setErrorMessage(null); setValid(true);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/BindingToCodeGeneration.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/BindingToCodeGeneration.java new file mode 100644 index 0000000..2985002 --- /dev/null +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/BindingToCodeGeneration.java
@@ -0,0 +1,62 @@ +/* + * Copyright (c) 2011 Google Inc. + * + * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse + * Public License v1.0 which accompanies this distribution, and is available at + * + * http://www.eclipse.org/legal/epl-v10.html + */ +package com.google.eclipse.protobuf.ui.preferences.pages.compiler; + +import com.google.eclipse.protobuf.ui.preferences.*; +import com.google.eclipse.protobuf.ui.preferences.binding.Binding; + +/** + * @author alruiz@google.com (Alex Ruiz) + */ +class BindingToCodeGeneration implements Binding { + + private final CodeGenerationSetting codeGeneration; + private final BooleanPreference enabled; + private final StringPreference outputDirectory; + + static BindingBuilder bindCodeGeneration(CodeGenerationSetting codeGeneration) { + return new BindingBuilder(codeGeneration); + } + + private BindingToCodeGeneration(CodeGenerationSetting codeGeneration, BooleanPreference enabled, StringPreference outputDirectory) { + this.codeGeneration = codeGeneration; + this.enabled = enabled; + this.outputDirectory = outputDirectory; + } + + /** {@inheritDoc} */ + public void applyPreferenceValueToTarget() { + codeGeneration.enabled(enabled.value()); + codeGeneration.outputDirectory(outputDirectory.value()); + } + + /** {@inheritDoc} */ + public void applyDefaultPreferenceValueToTarget() { + codeGeneration.enabled(enabled.defaultValue()); + codeGeneration.outputDirectory(outputDirectory.defaultValue()); + } + + /** {@inheritDoc} */ + public void savePreferenceValue() { + enabled.value(codeGeneration.isEnabled()); + outputDirectory.value(codeGeneration.outputDirectory()); + } + + static class BindingBuilder { + private final CodeGenerationSetting codeGeneration; + + BindingBuilder(CodeGenerationSetting codeGeneration) { + this.codeGeneration = codeGeneration; + } + + BindingToCodeGeneration to(BooleanPreference enabled, StringPreference outputDirectory) { + return new BindingToCodeGeneration(codeGeneration, enabled, outputDirectory); + } + } +}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CodeGenerationEditor.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CodeGenerationEditor.java index 49e42f6..0449722 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CodeGenerationEditor.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CodeGenerationEditor.java
@@ -37,7 +37,7 @@ private final TableViewer tblVwrCodeGenerationOptions; private final Button btnEdit; - private final List<CodeGeneration> options = new ArrayList<CodeGeneration>(); + private final List<CodeGenerationSetting> settings = new ArrayList<CodeGenerationSetting>(); private DataChangedListener dataChangedListener; @@ -62,7 +62,7 @@ } @Override public Image getImage(Object element) { - boolean optionEnabled = ((CodeGeneration)element).isEnabled(); + boolean optionEnabled = ((CodeGenerationSetting)element).isEnabled(); return imageHelper.getImage(optionEnabled ? "checked.gif" : "unchecked.gif"); //$NON-NLS-1$ //$NON-NLS-2$ } }); @@ -74,7 +74,7 @@ tblclmnLanguage.setText(language); tblclmnVwrLanguage.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { - return ((CodeGeneration)element).language().name(); + return ((CodeGenerationSetting)element).language().name(); } }); @@ -85,7 +85,7 @@ tblclmnOutputDirectory.setText(outputDirectory); tblclmnVwrOutputDirectory.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { - return ((CodeGeneration)element).outputDirectory(); + return ((CodeGenerationSetting)element).outputDirectory(); } }); @@ -108,7 +108,7 @@ btnEdit.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { int selectionIndex = tblCodeGenerationOptions.getSelectionIndex(); - CodeGeneration option = options.get(selectionIndex); + CodeGenerationSetting option = settings.get(selectionIndex); EditCodeGenerationDialog dialog = new EditCodeGenerationDialog(getShell(), option); if (dialog.open() == OK) { tblVwrCodeGenerationOptions.refresh(); @@ -118,19 +118,19 @@ }); } - public List<CodeGeneration> codeGenerationOptions() { - return unmodifiableList(options); + public List<CodeGenerationSetting> codeGenerationOptions() { + return unmodifiableList(settings); } - public void codeGenerationOptions(List<CodeGeneration> newOptions) { - options.clear(); - options.addAll(newOptions); + public void codeGenerationSettings(List<CodeGenerationSetting> newSettings) { + settings.clear(); + settings.addAll(newSettings); updateTable(); } private void updateTable() { - tblVwrCodeGenerationOptions.setInput(options); - if (!options.isEmpty()) tblCodeGenerationOptions.setSelection(0); + tblVwrCodeGenerationOptions.setInput(settings); + if (!settings.isEmpty()) tblCodeGenerationOptions.setSelection(0); } /** {@inheritDoc} */
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CodeGenerationPreferencesProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CodeGenerationPreferencesProvider.java deleted file mode 100644 index 8eff006..0000000 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CodeGenerationPreferencesProvider.java +++ /dev/null
@@ -1,68 +0,0 @@ -/* - * Copyright (c) 2011 Google Inc. - * - * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse - * Public License v1.0 which accompanies this distribution, and is available at - * - * http://www.eclipse.org/legal/epl-v10.html - */ -package com.google.eclipse.protobuf.ui.preferences.pages.compiler; - -import static java.util.Collections.unmodifiableList; - -import java.util.*; - -import org.eclipse.jface.preference.IPreferenceStore; - -import com.google.inject.Singleton; - -/** - * Reads "code generation" preferences. - * - * @author alruiz@google.com (Alex Ruiz) - */ -@Singleton -public class CodeGenerationPreferencesProvider { - - public List<CodeGeneration> getPreferences(IPreferenceStore store) { - List<CodeGeneration> options = new ArrayList<CodeGeneration>(); - for (SupportedLanguage language : SupportedLanguage.values()) options.add(read(store, language)); - return unmodifiableList(options); - } - - private static CodeGeneration read(IPreferenceStore store, SupportedLanguage language) { - String outputDirectory = store.getString(outputDirectoryPreferenceName(language)); - boolean enabled = store.getBoolean(codeGenerationEnabledPreferenceName(language)); - return new CodeGeneration(language, outputDirectory, enabled); - } - - public List<CodeGeneration> getDefaults(IPreferenceStore store) { - List<CodeGeneration> options = new ArrayList<CodeGeneration>(); - for (SupportedLanguage language : SupportedLanguage.values()) options.add(readDefault(store, language)); - return unmodifiableList(options); - } - - private static CodeGeneration readDefault(IPreferenceStore store, SupportedLanguage language) { - String outputDirectory = store.getDefaultString(outputDirectoryPreferenceName(language)); - boolean enabled = store.getDefaultBoolean(codeGenerationEnabledPreferenceName(language)); - return new CodeGeneration(language, outputDirectory, enabled); - } - - public void save(IPreferenceStore store, List<CodeGeneration> options) { - for (CodeGeneration option : options) save(store, option); - } - - private static void save(IPreferenceStore store, CodeGeneration option) { - SupportedLanguage language = option.language(); - store.setValue(outputDirectoryPreferenceName(language), option.outputDirectory()); - store.setValue(codeGenerationEnabledPreferenceName(language), option.isEnabled()); - } - - private static String outputDirectoryPreferenceName(SupportedLanguage language) { - return "compiler." + language.code() + "OutputDirectory"; - } - - private static String codeGenerationEnabledPreferenceName(SupportedLanguage language) { - return "compiler." + language.code() + "CodeGenerationEnabled"; - } -} \ No newline at end of file
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CodeGeneration.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CodeGenerationSetting.java similarity index 89% rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CodeGeneration.java rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CodeGenerationSetting.java index ca93f43..f945352 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CodeGeneration.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CodeGenerationSetting.java
@@ -8,23 +8,20 @@ */ package com.google.eclipse.protobuf.ui.preferences.pages.compiler; - /** * Indicates whether code generation for a specific language is enabled and where the generated code should be placed. * * @author alruiz@google.com (Alex Ruiz) */ -public class CodeGeneration { +public class CodeGenerationSetting { private final SupportedLanguage language; private String outputDirectory; private boolean enabled; - CodeGeneration(SupportedLanguage language, String outputDirectory, boolean enabled) { + CodeGenerationSetting(SupportedLanguage language) { this.language = language; - this.outputDirectory = outputDirectory; - this.enabled = enabled; } /**
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CodeGenerationSettings.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CodeGenerationSettings.java new file mode 100644 index 0000000..30415e5 --- /dev/null +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CodeGenerationSettings.java
@@ -0,0 +1,68 @@ +/* + * Copyright (c) 2011 Google Inc. + * + * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse + * Public License v1.0 which accompanies this distribution, and is available at + * + * http://www.eclipse.org/legal/epl-v10.html + */ +package com.google.eclipse.protobuf.ui.preferences.pages.compiler; + +import static com.google.eclipse.protobuf.ui.preferences.pages.compiler.SupportedLanguage.*; +import static java.util.Arrays.asList; +import static java.util.Collections.unmodifiableList; + +import java.util.List; + +/** + * All the supported <code>{@link CodeGenerationSetting}</code>s. + * + * @author alruiz@google.com (Alex Ruiz) + */ +public class CodeGenerationSettings { + + private final CodeGenerationSetting java; + private final CodeGenerationSetting cpp; + private final CodeGenerationSetting python; + + private final List<CodeGenerationSetting> allSettings; + + CodeGenerationSettings() { + java = new CodeGenerationSetting(JAVA); + cpp = new CodeGenerationSetting(CPP); + python = new CodeGenerationSetting(PYTHON); + allSettings = unmodifiableList(asList(java, cpp, python)); + } + + /** + * Returns the settings for code generation using Java. + * @return the settings for code generation using Java. + */ + public CodeGenerationSetting java() { + return java; + } + + /** + * Returns the settings for code generation using C++. + * @return the settings for code generation using C++. + */ + public CodeGenerationSetting cpp() { + return cpp; + } + + /** + * Returns the settings for code generation using Python. + * @return the settings for code generation using Python. + */ + public CodeGenerationSetting python() { + return python; + } + + /** + * Returns all the settings for code generation using all supported languages. + * @return all the settings for code generation using all supported languages. + */ + public List<CodeGenerationSetting> allSettings() { + return allSettings; + } +}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferencePage.java index c0eea98..a76f5d6 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferencePage.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferencePage.java
@@ -8,24 +8,26 @@ */ package com.google.eclipse.protobuf.ui.preferences.pages.compiler; +import static com.google.eclipse.protobuf.ui.preferences.binding.BindingToButtonSelection.bindSelectionOf; +import static com.google.eclipse.protobuf.ui.preferences.binding.BindingToTextValue.bindTextOf; +import static com.google.eclipse.protobuf.ui.preferences.pages.compiler.BindingToCodeGeneration.bindCodeGeneration; import static com.google.eclipse.protobuf.ui.preferences.pages.compiler.Messages.*; -import static com.google.eclipse.protobuf.ui.preferences.pages.compiler.PreferenceNames.*; import static com.google.eclipse.protobuf.ui.swt.EventListeners.addSelectionListener; import static java.util.Arrays.asList; import static org.eclipse.xtext.util.Strings.isEmpty; -import com.google.eclipse.protobuf.ui.preferences.*; -import com.google.eclipse.protobuf.ui.preferences.pages.PreferenceAndPropertyPage; -import com.google.inject.Inject; +import java.io.File; -import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.SWT; import org.eclipse.swt.events.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; import org.eclipse.xtext.ui.PluginImageHelper; -import java.io.File; +import com.google.eclipse.protobuf.ui.preferences.DataChangedListener; +import com.google.eclipse.protobuf.ui.preferences.binding.PreferenceBinder; +import com.google.eclipse.protobuf.ui.preferences.pages.PreferenceAndPropertyPage; +import com.google.inject.Inject; /** * Preference page for protobuf compiler. @@ -50,21 +52,18 @@ private Button btnRefreshResources; private Group grpRefresh; private Button btnRefreshProject; - private Button btnRefreshOutputFolder; + private Button btnRefreshOutputDirectory; @Inject private PluginImageHelper imageHelper; - @Inject private CodeGenerationPreferencesProvider codeGenerationPreferencesProvider; - /** {@inheritDoc} */ - @Override protected Control createContents(Composite parent) { - // generated by WindowBuilder - Composite contents = switchBetweenProjectAndWorkspaceSettings(parent); + private final CodeGenerationSettings codeGenerationSettings = new CodeGenerationSettings(); - btnCompileProtoFiles = new Button(contents, SWT.CHECK); + @Override protected void doCreateContents(Composite parent) { + btnCompileProtoFiles = new Button(parent, SWT.CHECK); btnCompileProtoFiles.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 2, 1)); btnCompileProtoFiles.setText(compileOnSave); - tabFolder = new TabFolder(contents, SWT.NONE); + tabFolder = new TabFolder(parent, SWT.NONE); tabFolder.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); tbtmMain = new TabItem(tabFolder, SWT.NONE); @@ -123,36 +122,12 @@ btnRefreshProject.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); btnRefreshProject.setText(refreshProject); - btnRefreshOutputFolder = new Button(grpRefresh, SWT.RADIO); - btnRefreshOutputFolder.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); - btnRefreshOutputFolder.setText(refreshOutputProject); - new Label(contents, SWT.NONE); + btnRefreshOutputDirectory = new Button(grpRefresh, SWT.RADIO); + btnRefreshOutputDirectory.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); + btnRefreshOutputDirectory.setText(refreshOutputProject); + new Label(parent, SWT.NONE); - updateFromPreferenceStore(); addEventListeners(); - - return contents; - } - - private void updateFromPreferenceStore() { - IPreferenceStore store = getPreferenceStore(); - boolean compileProtoFiles = store.getBoolean(COMPILE_PROTO_FILES); - btnCompileProtoFiles.setSelection(compileProtoFiles); - btnUseProtocInSystemPath.setSelection(store.getBoolean(USE_PROTOC_IN_SYSTEM_PATH)); - btnUseProtocInCustomPath.setSelection(store.getBoolean(USE_PROTOC_IN_CUSTOM_PATH)); - txtProtocFilePath.setText(store.getString(PROTOC_FILE_PATH)); - btnRefreshResources.setSelection(store.getBoolean(REFRESH_RESOURCES)); - btnRefreshProject.setSelection(store.getBoolean(REFRESH_PROJECT)); - btnRefreshOutputFolder.setSelection(store.getBoolean(REFRESH_OUTPUT_DIRECTORY)); - codeGenerationEditor.codeGenerationOptions(codeGenerationPreferencesProvider.getPreferences(store)); - boolean shouldEnableCompilerOptions = compileProtoFiles; - if (isPropertyPage()) { - boolean useProjectSettings = store.getBoolean(ENABLE_PROJECT_SETTINGS); - activateProjectSettings(useProjectSettings); - enableProjectSpecificOptions(useProjectSettings); - shouldEnableCompilerOptions = shouldEnableCompilerOptions && useProjectSettings; - } - enableCompilerOptions(shouldEnableCompilerOptions); } private void addEventListeners() { @@ -191,7 +166,7 @@ private void checkState() { boolean atLeastOneEnabled = false; - for (CodeGeneration option : codeGenerationEditor.codeGenerationOptions()) { + for (CodeGenerationSetting option : codeGenerationEditor.codeGenerationOptions()) { if (option.isEnabled()) { atLeastOneEnabled = true; break; @@ -218,26 +193,43 @@ pageIsNowValid(); } - /** {@inheritDoc} */ - @Override protected void performDefaults(IPreferenceStore store) { - boolean compileProtoFiles = store.getDefaultBoolean(COMPILE_PROTO_FILES); - btnCompileProtoFiles.setSelection(compileProtoFiles); - btnUseProtocInSystemPath.setSelection(store.getDefaultBoolean(USE_PROTOC_IN_SYSTEM_PATH)); - btnUseProtocInCustomPath.setSelection(store.getDefaultBoolean(USE_PROTOC_IN_CUSTOM_PATH)); - txtProtocFilePath.setText(store.getDefaultString(PROTOC_FILE_PATH)); - btnRefreshResources.setSelection(store.getDefaultBoolean(REFRESH_RESOURCES)); - btnRefreshProject.setSelection(store.getDefaultBoolean(REFRESH_PROJECT)); - btnRefreshOutputFolder.setSelection(store.getDefaultBoolean(REFRESH_OUTPUT_DIRECTORY)); - codeGenerationEditor.codeGenerationOptions(codeGenerationPreferencesProvider.getDefaults(store)); - boolean enableCompilerOptions = compileProtoFiles; + @Override protected void setupBinding(PreferenceBinder preferenceBinder) { + RawPreferences preferences = new RawPreferences(getPreferenceStore()); + preferenceBinder.addAll( + bindSelectionOf(btnCompileProtoFiles).to(preferences.compileProtoFiles()), + bindSelectionOf(btnUseProtocInSystemPath).to(preferences.useProtocInSystemPath()), + bindSelectionOf(btnUseProtocInCustomPath).to(preferences.useProtocInCustomPath()), + bindTextOf(txtProtocFilePath).to(preferences.protocPath()), + bindSelectionOf(btnRefreshResources).to(preferences.refreshResources()), + bindSelectionOf(btnRefreshProject).to(preferences.refreshProject()), + bindSelectionOf(btnRefreshOutputDirectory).to(preferences.refreshOutputDirectory()), + bindCodeGeneration(codeGenerationSettings.java()) + .to(preferences.javaCodeGenerationEnabled(), preferences.javaOutputDirectory()), + bindCodeGeneration(codeGenerationSettings.cpp()) + .to(preferences.cppCodeGenerationEnabled(), preferences.cppOutputDirectory()), + bindCodeGeneration(codeGenerationSettings.python()) + .to(preferences.pythonCodeGenerationEnabled(), preferences.pythonOutputDirectory()) + ); if (isPropertyPage()) { - boolean useProjectSettings = store.getDefaultBoolean(ENABLE_PROJECT_SETTINGS); + preferenceBinder.add(bindSelectionOf(btnEnableProjectSettings).to(preferences.enableProjectSettings())); + } + } + + @Override protected void onPageCreation() { + defaultsPerformed(); + } + + @Override protected void defaultsPerformed() { + boolean compileProtoFiles = btnCompileProtoFiles.getSelection(); + boolean shouldEnableCompilerOptions = compileProtoFiles; + if (isPropertyPage()) { + boolean useProjectSettings = btnEnableProjectSettings.isEnabled(); activateProjectSettings(useProjectSettings); enableProjectSpecificOptions(useProjectSettings); - enableCompilerOptions = enableCompilerOptions && useProjectSettings; + shouldEnableCompilerOptions = shouldEnableCompilerOptions && useProjectSettings; } - enableCompilerOptions(enableCompilerOptions); - super.performDefaults(); + enableCompilerOptions(shouldEnableCompilerOptions); + codeGenerationEditor.codeGenerationSettings(codeGenerationSettings.allSettings()); } /** {@inheritDoc} */ @@ -290,20 +282,7 @@ private void refreshResourcesOptionsEnabled(boolean isEnabled) { grpRefresh.setEnabled(isEnabled); btnRefreshProject.setEnabled(isEnabled); - btnRefreshOutputFolder.setEnabled(isEnabled); - } - - /** {@inheritDoc} */ - @Override protected void savePreferences(IPreferenceStore store) { - if (isPropertyPage()) store.setValue(ENABLE_PROJECT_SETTINGS, areProjectSettingsActive()); - store.setValue(COMPILE_PROTO_FILES, btnCompileProtoFiles.getSelection()); - store.setValue(USE_PROTOC_IN_SYSTEM_PATH, btnUseProtocInSystemPath.getSelection()); - store.setValue(USE_PROTOC_IN_CUSTOM_PATH, btnUseProtocInCustomPath.getSelection()); - store.setValue(PROTOC_FILE_PATH, txtProtocFilePath.getText()); - store.setValue(REFRESH_RESOURCES, btnRefreshResources.getSelection()); - store.setValue(REFRESH_PROJECT, btnRefreshProject.getSelection()); - store.setValue(REFRESH_OUTPUT_DIRECTORY, btnRefreshOutputFolder.getSelection()); - codeGenerationPreferencesProvider.save(store, codeGenerationEditor.codeGenerationOptions()); + btnRefreshOutputDirectory.setEnabled(isEnabled); } /** {@inheritDoc} */
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferenceStoreInitializer.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferenceStoreInitializer.java index 6f41722..4e2b046 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferenceStoreInitializer.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferenceStoreInitializer.java
@@ -8,11 +8,8 @@ */ package com.google.eclipse.protobuf.ui.preferences.pages.compiler; -import static com.google.eclipse.protobuf.ui.preferences.pages.compiler.PreferenceNames.*; - import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess; -import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer; +import org.eclipse.xtext.ui.editor.preferences.*; /** * Initializes default values for the "Compiler" preferences. @@ -26,16 +23,16 @@ /** {@inheritDoc} */ public void initialize(IPreferenceStoreAccess access) { IPreferenceStore store = access.getWritablePreferenceStore(); - store.setDefault(ENABLE_PROJECT_SETTINGS, false); - store.setDefault(USE_PROTOC_IN_SYSTEM_PATH, true); - store.setDefault(GENERATE_JAVA_CODE, false); - store.setDefault(GENERATE_CPP_CODE, false); - store.setDefault(GENERATE_PYTHON_CODE, false); - store.setDefault(JAVA_OUTPUT_DIRECTORY, DEFAULT_OUTPUT_DIRECTORY); - store.setDefault(CPP_OUTPUT_DIRECTORY, DEFAULT_OUTPUT_DIRECTORY); - store.setDefault(PYTHON_OUTPUT_DIRECTORY, DEFAULT_OUTPUT_DIRECTORY); - store.setDefault(REFRESH_RESOURCES, true); - store.setDefault(REFRESH_OUTPUT_DIRECTORY, true); + RawPreferences preferences = new RawPreferences(store); + preferences.enableProjectSettings().defaultValue(false); + preferences.useProtocInSystemPath().defaultValue(true); + preferences.javaCodeGenerationEnabled().defaultValue(false); + preferences.cppCodeGenerationEnabled().defaultValue(false); + preferences.pythonCodeGenerationEnabled().defaultValue(false); + preferences.javaOutputDirectory().defaultValue(DEFAULT_OUTPUT_DIRECTORY); + preferences.cppOutputDirectory().defaultValue(DEFAULT_OUTPUT_DIRECTORY); + preferences.pythonOutputDirectory().defaultValue(DEFAULT_OUTPUT_DIRECTORY); + preferences.refreshResources().defaultValue(true); + preferences.refreshOutputDirectory().defaultValue(true); } - }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferences.java index 57cda26..78f8aba 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferences.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferences.java
@@ -8,10 +8,7 @@ */ package com.google.eclipse.protobuf.ui.preferences.pages.compiler; -import static com.google.eclipse.protobuf.ui.preferences.pages.compiler.PreferenceNames.*; -import static java.util.Collections.unmodifiableList; - -import java.util.List; +import static com.google.eclipse.protobuf.ui.preferences.pages.compiler.PostCompilationRefreshTarget.*; import org.eclipse.jface.preference.IPreferenceStore; @@ -24,17 +21,24 @@ private final boolean compileProtoFiles; private final String protocPath; - private final List<CodeGeneration> codeGenerationOptions; + private final CodeGenerationSettings codeGenerationSettings; private final boolean refreshResources; private final PostCompilationRefreshTarget refreshTarget; - CompilerPreferences(IPreferenceStore store, List<CodeGeneration> codeGenerationOptions) { - compileProtoFiles = store.getBoolean(COMPILE_PROTO_FILES); - boolean useProtocInSystemPath = store.getBoolean(USE_PROTOC_IN_SYSTEM_PATH); - protocPath = (useProtocInSystemPath) ? "protoc" : store.getString(PROTOC_FILE_PATH); - this.codeGenerationOptions = unmodifiableList(codeGenerationOptions); - refreshResources = store.getBoolean(REFRESH_RESOURCES); - refreshTarget = PostCompilationRefreshTarget.readFrom(store); + CompilerPreferences(RawPreferences preferences) { + compileProtoFiles = preferences.compileProtoFiles().value(); + boolean useProtocInSystemPath = preferences.useProtocInSystemPath().value(); + protocPath = (useProtocInSystemPath) ? "protoc" : preferences.protocPath().value(); + codeGenerationSettings = new CodeGenerationSettings(); + codeGenerationSettings.java().enabled(preferences.javaCodeGenerationEnabled().value()); + codeGenerationSettings.java().outputDirectory(preferences.javaOutputDirectory().value()); + codeGenerationSettings.cpp().enabled(preferences.cppCodeGenerationEnabled().value()); + codeGenerationSettings.cpp().outputDirectory(preferences.cppOutputDirectory().value()); + codeGenerationSettings.python().enabled(preferences.pythonCodeGenerationEnabled().value()); + codeGenerationSettings.python().outputDirectory(preferences.pythonOutputDirectory().value()); + refreshResources = preferences.refreshResources().value(); + boolean refreshProject = preferences.refreshProject().value(); + refreshTarget = refreshProject ? PROJECT : OUTPUT_DIRECTORIES; } public boolean shouldCompileProtoFiles() { @@ -45,8 +49,8 @@ return protocPath; } - public List<CodeGeneration> codeGenerationOptions() { - return codeGenerationOptions; + public CodeGenerationSettings codeGenerationSettings() { + return codeGenerationSettings; } public boolean shouldRefreshResources() {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferencesProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferencesProvider.java index 531ca77..658fc05 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferencesProvider.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferencesProvider.java
@@ -8,8 +8,6 @@ */ package com.google.eclipse.protobuf.ui.preferences.pages.compiler; -import static com.google.eclipse.protobuf.ui.preferences.pages.compiler.PreferenceNames.ENABLE_PROJECT_SETTINGS; - import org.eclipse.core.resources.IProject; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess; @@ -24,12 +22,12 @@ public class CompilerPreferencesProvider { @Inject private IPreferenceStoreAccess storeAccess; - @Inject private CodeGenerationPreferencesProvider codeGenerationPreferencesProvider; public CompilerPreferences getPreferences(IProject project) { IPreferenceStore store = storeAccess.getWritablePreferenceStore(project); - boolean useProjectPreferences = store.getBoolean(ENABLE_PROJECT_SETTINGS); + RawPreferences preferences = new RawPreferences(store); + boolean useProjectPreferences = preferences.enableProjectSettings().value(); if (!useProjectPreferences) store = storeAccess.getWritablePreferenceStore(); - return new CompilerPreferences(store, codeGenerationPreferencesProvider.getPreferences(store)); + return new CompilerPreferences(new RawPreferences(store)); } }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/EditCodeGenerationDialog.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/EditCodeGenerationDialog.java index 59fe93c..2db3b2a 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/EditCodeGenerationDialog.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/EditCodeGenerationDialog.java
@@ -30,7 +30,7 @@ */ public class EditCodeGenerationDialog extends InputDialog { - private final CodeGeneration option; + private final CodeGenerationSetting option; private Text txtOutputDirectory; private Button btnEnabled; @@ -41,7 +41,7 @@ * @param parent a shell which will be the parent of the new instance. * @param option the code generation option to edit. */ - public EditCodeGenerationDialog(Shell parent, CodeGeneration option) { + public EditCodeGenerationDialog(Shell parent, CodeGenerationSetting option) { super(parent, editCodeGenerationOptionTitle + option.language().name()); this.option = option; }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/PostCompilationRefreshTarget.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/PostCompilationRefreshTarget.java index ba7a750..2fb2cbf 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/PostCompilationRefreshTarget.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/PostCompilationRefreshTarget.java
@@ -8,10 +8,6 @@ */ package com.google.eclipse.protobuf.ui.preferences.pages.compiler; -import static com.google.eclipse.protobuf.ui.preferences.pages.compiler.PreferenceNames.REFRESH_PROJECT; - -import org.eclipse.jface.preference.IPreferenceStore; - /** * The type of resource to refresh after calling protoc. * @@ -21,8 +17,4 @@ PROJECT, OUTPUT_DIRECTORIES; - static PostCompilationRefreshTarget readFrom(IPreferenceStore store) { - if (store.getBoolean(REFRESH_PROJECT)) return PROJECT; - return OUTPUT_DIRECTORIES; - } }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/PreferenceNames.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/PreferenceNames.java deleted file mode 100644 index 0157080..0000000 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/PreferenceNames.java +++ /dev/null
@@ -1,32 +0,0 @@ -/* - * Copyright (c) 2011 Google Inc. - * - * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse - * Public License v1.0 which accompanies this distribution, and is available at - * - * http://www.eclipse.org/legal/epl-v10.html - */ -package com.google.eclipse.protobuf.ui.preferences.pages.compiler; - -/** - * @author alruiz@google.com (Alex Ruiz) - */ -final class PreferenceNames { - - static final String ENABLE_PROJECT_SETTINGS = "compiler.enableProjectSettings"; - static final String COMPILE_PROTO_FILES = "compiler.compileProtoFiles"; - static final String USE_PROTOC_IN_SYSTEM_PATH = "compiler.useProtocInSystemPath"; - static final String USE_PROTOC_IN_CUSTOM_PATH = "compiler.useProtocInCustomPath"; - static final String PROTOC_FILE_PATH = "compiler.protocFilePath"; - static final String GENERATE_JAVA_CODE = "compiler.javaCodeGenerationEnabled"; - static final String GENERATE_CPP_CODE = "compiler.cppCodeGenerationEnabled"; - static final String GENERATE_PYTHON_CODE = "compiler.pythonCodeGenerationEnabled"; - static final String JAVA_OUTPUT_DIRECTORY = "compiler.javaOutputDirectory"; - static final String CPP_OUTPUT_DIRECTORY = "compiler.cppOutputDirectory"; - static final String PYTHON_OUTPUT_DIRECTORY = "compiler.pythonOutputDirectory"; - static final String REFRESH_RESOURCES = "compiler.refreshResources"; - static final String REFRESH_PROJECT = "compiler.refreshProject"; - static final String REFRESH_OUTPUT_DIRECTORY = "compiler.refreshOutputDirectory"; - - private PreferenceNames() {} -}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/RawPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/RawPreferences.java new file mode 100644 index 0000000..1394d3b --- /dev/null +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/RawPreferences.java
@@ -0,0 +1,107 @@ +/* + * Copyright (c) 2011 Google Inc. + * + * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse + * License v1.0 which accompanies this distribution, and is available at + * + * http://www.eclipse.org/legal/epl-v10.html + */ +package com.google.eclipse.protobuf.ui.preferences.pages.compiler; + +import org.eclipse.jface.preference.IPreferenceStore; + +import com.google.eclipse.protobuf.ui.preferences.*; + +/** + * @author alruiz@google.com (Alex Ruiz) + */ +class RawPreferences { + + private final BooleanPreference enableProjectSettings; + private final BooleanPreference compileProtoFiles; + private final BooleanPreference useProtocInSystemPath; + private final BooleanPreference useProtocInCustomPath; + private final StringPreference protocPath; + private final BooleanPreference javaCodeGenerationEnabled; + private final BooleanPreference cppCodeGenerationEnabled; + private final BooleanPreference pythonCodeGenerationEnabled; + private final StringPreference javaOutputDirectory; + private final StringPreference cppOutputDirectory; + private final StringPreference pythonOutputDirectory; + private final BooleanPreference refreshResources; + private final BooleanPreference refreshProject; + private final BooleanPreference refreshOutputDirectory; + + RawPreferences(IPreferenceStore store) { + enableProjectSettings = new BooleanPreference("compiler.enableProjectSettings", store); + compileProtoFiles = new BooleanPreference("compiler.compileProtoFiles", store); + useProtocInSystemPath = new BooleanPreference("compiler.useProtocInSystemPath", store); + useProtocInCustomPath = new BooleanPreference("compiler.useProtocInCustomPath", store); + protocPath = new StringPreference("compiler.protocFilePath", store); + javaCodeGenerationEnabled = new BooleanPreference("compiler.javaCodeGenerationEnabled", store); + cppCodeGenerationEnabled = new BooleanPreference("compiler.cppCodeGenerationEnabled", store); + pythonCodeGenerationEnabled = new BooleanPreference("compiler.pythonCodeGenerationEnabled", store); + javaOutputDirectory = new StringPreference("compiler.javaOutputDirectory", store); + cppOutputDirectory = new StringPreference("compiler.cppOutputDirectory", store); + pythonOutputDirectory = new StringPreference("compiler.pythonOutputDirectory", store); + refreshResources = new BooleanPreference("compiler.refreshResources", store); + refreshProject = new BooleanPreference("compiler.refreshProject", store); + refreshOutputDirectory = new BooleanPreference("compiler.refreshOutputDirectory", store); + } + + BooleanPreference enableProjectSettings() { + return enableProjectSettings; + } + + BooleanPreference compileProtoFiles() { + return compileProtoFiles; + } + + BooleanPreference useProtocInSystemPath() { + return useProtocInSystemPath; + } + + BooleanPreference useProtocInCustomPath() { + return useProtocInCustomPath; + } + + StringPreference protocPath() { + return protocPath; + } + + BooleanPreference javaCodeGenerationEnabled() { + return javaCodeGenerationEnabled; + } + + BooleanPreference cppCodeGenerationEnabled() { + return cppCodeGenerationEnabled; + } + + BooleanPreference pythonCodeGenerationEnabled() { + return pythonCodeGenerationEnabled; + } + + StringPreference javaOutputDirectory() { + return javaOutputDirectory; + } + + StringPreference cppOutputDirectory() { + return cppOutputDirectory; + } + + StringPreference pythonOutputDirectory() { + return pythonOutputDirectory; + } + + BooleanPreference refreshResources() { + return refreshResources; + } + + BooleanPreference refreshProject() { + return refreshProject; + } + + BooleanPreference refreshOutputDirectory() { + return refreshOutputDirectory; + } +}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/general/GeneralSettingsPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/general/GeneralSettingsPreferencePage.java index 40066aa..ef637d1 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/general/GeneralSettingsPreferencePage.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/general/GeneralSettingsPreferencePage.java
@@ -8,51 +8,40 @@ */ package com.google.eclipse.protobuf.ui.preferences.pages.general; -import com.google.eclipse.protobuf.ui.preferences.pages.PreferenceAndPropertyPage; - -import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; + +import com.google.eclipse.protobuf.ui.preferences.binding.PreferenceBinder; +import com.google.eclipse.protobuf.ui.preferences.pages.PreferenceAndPropertyPage; /** * @author alruiz@google.com (Alex Ruiz) */ public class GeneralSettingsPreferencePage extends PreferenceAndPropertyPage { - public GeneralSettingsPreferencePage() { - } private static final String PREFERENCE_PAGE_ID = GeneralSettingsPreferencePage.class.getName(); - + /** {@inheritDoc} */ - @Override protected Control createContents(Composite parent) { + @Override protected void doCreateContents(Composite contents) { // generated by WindowBuilder - Composite contents = super.switchBetweenProjectAndWorkspaceSettings(parent); - GridLayout gridLayout = (GridLayout) contents.getLayout(); - gridLayout.numColumns = 2; - Group grpValidation = new Group(contents, SWT.NONE); grpValidation.setLayout(new GridLayout(1, false)); - grpValidation.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); + grpValidation.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1)); grpValidation.setText("Content Validation"); - + Button btnValidateOnActivation = new Button(grpValidation, SWT.CHECK); btnValidateOnActivation.setText("Validate files when activated"); - return contents; } /** {@inheritDoc} */ + @Override protected void setupBinding(PreferenceBinder preferenceBinder) {} + + /** {@inheritDoc} */ @Override protected void onProjectSettingsActivation(boolean active) {} /** {@inheritDoc} */ @Override protected String preferencePageId() { return PREFERENCE_PAGE_ID; } - - /** {@inheritDoc} */ - @Override protected void savePreferences(IPreferenceStore store) {} - - /** {@inheritDoc} */ - @Override protected void performDefaults(IPreferenceStore store) {} }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathResolutionType.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathResolutionType.java index bb8e24c..29fbfa6 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathResolutionType.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathResolutionType.java
@@ -5,23 +5,16 @@ * Public License v1.0 which accompanies this distribution, and is available at * * http://www.eclipse.org/legal/epl-v10.html - */package com.google.eclipse.protobuf.ui.preferences.pages.paths; - -import static com.google.eclipse.protobuf.ui.preferences.pages.paths.PreferenceNames.FILES_IN_ONE_DIRECTORY_ONLY; - -import org.eclipse.jface.preference.IPreferenceStore; + */ +package com.google.eclipse.protobuf.ui.preferences.pages.paths; /** * Types of file resolution. - * + * * @author alruiz@google.com (Alex Ruiz) */ public enum PathResolutionType { SINGLE_DIRECTORY, MULTIPLE_DIRECTORIES; - - static PathResolutionType readFrom(IPreferenceStore store) { - if (store.getBoolean(FILES_IN_ONE_DIRECTORY_ONLY)) return SINGLE_DIRECTORY; - return MULTIPLE_DIRECTORIES; - } + }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferencePage.java index 64e0e5c..925bcb2 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferencePage.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferencePage.java
@@ -8,8 +8,8 @@ */ package com.google.eclipse.protobuf.ui.preferences.pages.paths; +import static com.google.eclipse.protobuf.ui.preferences.binding.BindingToButtonSelection.bindSelectionOf; import static com.google.eclipse.protobuf.ui.preferences.pages.paths.Messages.*; -import static com.google.eclipse.protobuf.ui.preferences.pages.paths.PreferenceNames.*; import static com.google.eclipse.protobuf.ui.swt.EventListeners.addSelectionListener; import static java.util.Arrays.asList; import static java.util.Collections.unmodifiableList; @@ -18,7 +18,6 @@ import java.util.*; import java.util.List; -import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.SWT; import org.eclipse.swt.events.*; import org.eclipse.swt.layout.*; @@ -47,15 +46,15 @@ @Inject private PluginImageHelper imageHelper; - private final PreferenceBinder preferenceBinder = new PreferenceBinder(); - - /** {@inheritDoc} */ - @Override protected Control createContents(Composite parent) { - // generated by WindowBuilder - Composite contents = new Composite(parent, NONE); + @Override protected Composite contentParent(Composite parent) { + Composite contents = new Composite(parent, SWT.NONE); contents.setLayout(new GridLayout(3, false)); + return contents; + } - grpResolutionOfImported = new Group(contents, SWT.NONE); + @Override protected void doCreateContents(Composite parent) { + // generated by WindowBuilder + grpResolutionOfImported = new Group(parent, SWT.NONE); grpResolutionOfImported.setLayout(new GridLayout(1, false)); grpResolutionOfImported.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); grpResolutionOfImported.setText(importedFilesPathResolution); @@ -70,55 +69,9 @@ directoryPathsEditor = new DirectoryPathsEditor(grpResolutionOfImported, project(), imageHelper); directoryPathsEditor.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); - new Label(contents, SWT.NONE); + new Label(parent, SWT.NONE); - setUpBinding(); - updateFromPreferenceStore(); addEventListeners(); - - return contents; - } - - private void setUpBinding() { - preferenceBinder.bind(FILES_IN_ONE_DIRECTORY_ONLY, btnOneDirectoryOnly); - preferenceBinder.bind(FILES_IN_MULTIPLE_DIRECTORIES, btnMultipleDirectories); - preferenceBinder.add(new Binding() { - public void read(IPreferenceStore store) { - setDirectoryPaths(store.getString(IMPORT_ROOTS)); - } - - public void readDefault(IPreferenceStore store) { - setDirectoryPaths(store.getDefaultString(IMPORT_ROOTS)); - } - - public void save(IPreferenceStore store) { - store.setValue(IMPORT_ROOTS, directoryNames()); - } - }); - } - - private String directoryNames() { - List<DirectoryPath> paths = directoryPathsEditor.directoryPaths(); - if (paths.isEmpty()) return ""; - List<String> pathsAsText = new ArrayList<String>(); - for (DirectoryPath path : paths) { - pathsAsText.add(path.toString()); - } - return concat(COMMA_DELIMITER, pathsAsText); - } - - private void setDirectoryPaths(String directoryPaths) { - List<DirectoryPath> paths = new ArrayList<DirectoryPath>(); - for (String path : split(directoryPaths, COMMA_DELIMITER)) { - if (isEmpty(path)) continue; - paths.add(DirectoryPath.parse(path)); - } - directoryPathsEditor.directoryPaths(unmodifiableList(paths)); - } - - private void updateFromPreferenceStore() { - preferenceBinder.readPreferences(getPreferenceStore()); - enableProjectOptions(true); } private void addEventListeners() { @@ -144,15 +97,58 @@ pageIsNowValid(); } + @Override protected void setupBinding(PreferenceBinder preferenceBinder) { + RawPreferences preferences = new RawPreferences(getPreferenceStore()); + preferenceBinder.addAll( + bindSelectionOf(btnOneDirectoryOnly).to(preferences.filesInOneDirectoryOnly()), + bindSelectionOf(btnMultipleDirectories).to(preferences.filesInMultipleDirectories()) + ); + final StringPreference directoryPaths = preferences.directoryPaths(); + preferenceBinder.add(new Binding() { + public void applyPreferenceValueToTarget() { + setDirectoryPaths(directoryPaths.value()); + } + + public void applyDefaultPreferenceValueToTarget() { + setDirectoryPaths(directoryPaths.defaultValue()); + } + + public void savePreferenceValue() { + directoryPaths.value(directoryNames()); + } + }); + } + + private String directoryNames() { + List<DirectoryPath> paths = directoryPathsEditor.directoryPaths(); + if (paths.isEmpty()) return ""; + List<String> pathsAsText = new ArrayList<String>(); + for (DirectoryPath path : paths) { + pathsAsText.add(path.toString()); + } + return concat(COMMA_DELIMITER, pathsAsText); + } + + private void setDirectoryPaths(String directoryPaths) { + List<DirectoryPath> paths = new ArrayList<DirectoryPath>(); + for (String path : split(directoryPaths, COMMA_DELIMITER)) { + if (isEmpty(path)) continue; + paths.add(DirectoryPath.parse(path)); + } + directoryPathsEditor.directoryPaths(unmodifiableList(paths)); + } + + @Override protected void onPageCreation() { + defaultsPerformed(); + } + /** {@inheritDoc} */ @Override protected void onProjectSettingsActivation(boolean active) { enableProjectOptions(active); } - @Override protected void performDefaults(IPreferenceStore store) { - preferenceBinder.readDefaultPreferences(store); + @Override protected void defaultsPerformed() { enableProjectOptions(true); - super.performDefaults(); } private void enableProjectOptions(boolean enabled) { @@ -163,11 +159,6 @@ } /** {@inheritDoc} */ - @Override protected void savePreferences(IPreferenceStore store) { - preferenceBinder.savePreferences(store); - } - - /** {@inheritDoc} */ @Override protected String preferencePageId() { return PREFERENCE_PAGE_ID; }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferenceStoreInitializer.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferenceStoreInitializer.java index 794538f..b5e8876 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferenceStoreInitializer.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferenceStoreInitializer.java
@@ -8,11 +8,8 @@ */ package com.google.eclipse.protobuf.ui.preferences.pages.paths; -import static com.google.eclipse.protobuf.ui.preferences.pages.paths.PreferenceNames.*; - import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess; -import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer; +import org.eclipse.xtext.ui.editor.preferences.*; /** * Initializes default values for the "Paths" preferences. @@ -24,9 +21,9 @@ /** {@inheritDoc} */ public void initialize(IPreferenceStoreAccess access) { IPreferenceStore store = access.getWritablePreferenceStore(); - store.setDefault(FILES_IN_ONE_DIRECTORY_ONLY, true); - store.setDefault(FILES_IN_MULTIPLE_DIRECTORIES, false); - store.setDefault(IMPORT_ROOTS, ""); + RawPreferences preferences = new RawPreferences(store); + preferences.filesInOneDirectoryOnly().defaultValue(true); + preferences.filesInMultipleDirectories().defaultValue(false); + preferences.directoryPaths().defaultValue(""); } - }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferences.java index dab2d73..cf5b6e0 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferences.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferences.java
@@ -8,19 +8,18 @@ */ package com.google.eclipse.protobuf.ui.preferences.pages.paths; -import static com.google.eclipse.protobuf.ui.preferences.pages.paths.PathResolutionType.SINGLE_DIRECTORY; -import static com.google.eclipse.protobuf.ui.preferences.pages.paths.PreferenceNames.IMPORT_ROOTS; +import static com.google.eclipse.protobuf.ui.preferences.pages.paths.PathResolutionType.*; import static com.google.eclipse.protobuf.ui.util.Strings.CSV_PATTERN; import static java.util.Collections.*; +import java.util.*; + import org.eclipse.core.resources.IProject; import org.eclipse.jface.preference.IPreferenceStore; -import java.util.*; - /** * Paths preferences, retrieved from an <code>{@link IPreferenceStore}</code>. To create a new instance invoke - * <code>{@link PathsPreferencesProvider#getPreferences(org.eclipse.core.resources.IProject)}</code> + * <code>{@link PathsPreferencesFactory#preferences(IProject)}</code> * * @author alruiz@google.com (Alex Ruiz) */ @@ -29,15 +28,16 @@ private final PathResolutionType pathResolutionType; private final List<DirectoryPath> importRoots; - PathsPreferences(IPreferenceStore store, IProject project) { - pathResolutionType = PathResolutionType.readFrom(store); - importRoots = importRoots(pathResolutionType, store, project); + PathsPreferences(RawPreferences preferences, IProject project) { + boolean filesInOneDirectoryOnly = preferences.filesInOneDirectoryOnly().value(); + pathResolutionType = filesInOneDirectoryOnly ? SINGLE_DIRECTORY : MULTIPLE_DIRECTORIES; + importRoots = importRoots(preferences, project); } - private static List<DirectoryPath> importRoots(PathResolutionType resolutionType, IPreferenceStore store, IProject project) { - if (resolutionType.equals(SINGLE_DIRECTORY)) return emptyList(); + private List<DirectoryPath> importRoots(RawPreferences preferences, IProject project) { + if (pathResolutionType.equals(SINGLE_DIRECTORY)) return emptyList(); List<DirectoryPath> roots = new ArrayList<DirectoryPath>(); - for (String root : store.getString(IMPORT_ROOTS).split(CSV_PATTERN)) { + for (String root : preferences.directoryPaths().value().split(CSV_PATTERN)) { roots.add(DirectoryPath.parse(root, project)); } return unmodifiableList(roots);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferencesProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferencesFactory.java similarity index 76% rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferencesProvider.java rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferencesFactory.java index 0f11255..8b48810 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferencesProvider.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferencesFactory.java
@@ -15,16 +15,17 @@ import com.google.inject.Inject; /** - * Reads "paths" preferences. - * + * Factory of <code>{@link PathsPreferences}</code>. + * * @author alruiz@google.com (Alex Ruiz) */ -public class PathsPreferencesProvider { + +public class PathsPreferencesFactory { @Inject private IPreferenceStoreAccess storeAccess; - - public PathsPreferences getPreferences(IProject project) { + + public PathsPreferences preferences(IProject project) { IPreferenceStore store = storeAccess.getWritablePreferenceStore(project); - return new PathsPreferences(store, project); + return new PathsPreferences(new RawPreferences(store), project); } }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PreferenceNames.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PreferenceNames.java deleted file mode 100644 index c76d17d..0000000 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PreferenceNames.java +++ /dev/null
@@ -1,21 +0,0 @@ -/* - * Copyright (c) 2011 Google Inc. - * - * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse - * Public License v1.0 which accompanies this distribution, and is available at - * - * http://www.eclipse.org/legal/epl-v10.html - */ -package com.google.eclipse.protobuf.ui.preferences.pages.paths; - -/** - * @author alruiz@google.com (Alex Ruiz) - */ -final class PreferenceNames { - - static final String FILES_IN_ONE_DIRECTORY_ONLY = "paths.filesInOneDirectoryOnly"; - static final String FILES_IN_MULTIPLE_DIRECTORIES = "paths.filesInMultipleDirectories"; - static final String IMPORT_ROOTS = "paths.directoryPaths"; - - private PreferenceNames() {} -}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/RawPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/RawPreferences.java new file mode 100644 index 0000000..c1f77f7 --- /dev/null +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/RawPreferences.java
@@ -0,0 +1,41 @@ +/* + * Copyright (c) 2011 Google Inc. + * + * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse + * Public License v1.0 which accompanies this distribution, and is available at + * + * http://www.eclipse.org/legal/epl-v10.html + */ +package com.google.eclipse.protobuf.ui.preferences.pages.paths; + +import org.eclipse.jface.preference.IPreferenceStore; + +import com.google.eclipse.protobuf.ui.preferences.*; + +/** + * @author alruiz@google.com (Alex Ruiz) + */ +class RawPreferences { + + private final BooleanPreference filesInOneDirectoryOnly; + private final BooleanPreference filesInMultipleDirectories; + private final StringPreference directoryPaths; + + RawPreferences(IPreferenceStore store) { + filesInOneDirectoryOnly = new BooleanPreference("paths.filesInOneDirectoryOnly", store); + filesInMultipleDirectories = new BooleanPreference("paths.filesInMultipleDirectories", store); + directoryPaths = new StringPreference("paths.directoryPaths", store); + } + + BooleanPreference filesInOneDirectoryOnly() { + return filesInOneDirectoryOnly; + } + + BooleanPreference filesInMultipleDirectories() { + return filesInMultipleDirectories; + } + + StringPreference directoryPaths() { + return directoryPaths; + } +}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileUriResolver.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileUriResolver.java index dffb88c..c509ea5 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileUriResolver.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileUriResolver.java
@@ -26,7 +26,7 @@ */ public class FileUriResolver implements IFileUriResolver { - @Inject private PathsPreferencesProvider preferenceProvider; + @Inject private PathsPreferencesFactory preferencesFactory; @Inject private FileResolverStrategies resolvers; @Inject private Resources resources; @@ -60,7 +60,7 @@ IProject project = resources.project(resourceUri); if (project == null) project = resources.activeProject(); if (project == null) throw new IllegalStateException("Unable to find current project"); - PathsPreferences preferences = preferenceProvider.getPreferences(project); + PathsPreferences preferences = preferencesFactory.preferences(project); return resolver(preferences).resolveUri(importUri, resourceUri, preferences); }