Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/keenwrite.git

Replace FilePreferences and Factory classes by Workspace

AuthorDaveJarvis <email>
Date2020-12-20 19:35:16 GMT-0800
Commitb36145588d157f1854306d966b1fffaa250f154f
Parent76842e9
Delta37 lines added, 95 lines removed, 58-line decrease
src/test/java/com/keenwrite/definition/TreeViewTest.java
import org.testfx.framework.junit5.Start;
-import static com.keenwrite.preferences.UserPreferences.initPreferences;
import static com.keenwrite.util.FontLoader.initFonts;
import static java.lang.Thread.sleep;
public static void main( final String[] args ) {
- initPreferences();
initFonts();
launch( args );
src/main/java/com/keenwrite/ui/actions/FileChooserCommand.java
import com.keenwrite.Messages;
-import com.keenwrite.io.File;
import com.keenwrite.io.FileType;
import com.keenwrite.service.Settings;
import javafx.beans.property.Property;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;
import javafx.stage.Window;
+import java.io.File;
import java.util.ArrayList;
import java.util.List;
final var files = new ArrayList<File>( selected.size() );
- for( final var file : selected ) {
- files.add( new File( file ) );
- }
+ files.addAll( selected );
if( !files.isEmpty() ) {
*/
private Optional<File> saveOrExportAs( final FileChooser dialog ) {
- final var selected = dialog.showSaveDialog( mParent );
- final var file = selected == null ? null : new File( selected );
+ final var file = dialog.showSaveDialog( mParent );
setRecentDirectory( file );
if( dir.isDirectory() && dir.canRead() ) {
- mDirectory.setValue( new File( dir ) );
+ mDirectory.setValue( dir );
}
}
src/main/java/com/keenwrite/preferences/UserPreferences.java
}
- /**
- * Initializes the user preferences from a file resource.
- */
- public static void initPreferences() {
- System.setProperty(
- "java.util.prefs.PreferencesFactory",
- FilePreferencesFactory.class.getName()
- );
- }
-
private final ObjectProperty<File> mPropRDirectory;
private final StringProperty mPropRScript;
src/main/java/com/keenwrite/preferences/UserPreferencesView.java
import com.dlsc.preferencesfx.model.Group;
import com.dlsc.preferencesfx.model.Setting;
-import javafx.beans.property.IntegerProperty;
+import javafx.beans.property.DoubleProperty;
import javafx.beans.property.ObjectProperty;
+import javafx.beans.property.Property;
import javafx.beans.property.StringProperty;
import javafx.event.EventHandler;
import javafx.scene.Node;
import javafx.scene.control.Label;
import java.io.File;
import static com.keenwrite.Constants.ICON_DIALOG;
import static com.keenwrite.Messages.get;
+import static com.keenwrite.preferences.Workspace.*;
/**
* Responsible for configuring the {@link UserPreferences} user interface.
*/
public class UserPreferencesView {
- /**
- * Implementation of the initialization-on-demand holder design pattern,
- * an for a lazy-loaded singleton. In all versions of Java, the idiom enables
- * a safe, highly concurrent lazy initialization of static fields with good
- * performance. The implementation relies upon the initialization phase of
- * execution within the Java Virtual Machine (JVM) as specified by the Java
- * Language Specification.
- */
- private static class Container {
- private static final UserPreferencesView INSTANCE =
- new UserPreferencesView();
- }
-
- /**
- * Returns the singleton instance for rendering math symbols.
- *
- * @return A non-null instance, loaded, configured, and ready to render math.
- */
- public static UserPreferencesView getInstance() {
- return Container.INSTANCE;
- }
+ private final Workspace mWorkspace;
private final PreferencesFx mPreferencesFx;
- public UserPreferencesView() {
+ public UserPreferencesView(final Workspace workspace) {
+ mWorkspace = workspace;
+
// All properties must be initialized before creating the dialog.
mPreferencesFx = createPreferencesFx();
private PreferencesFx createPreferencesFx() {
final Setting<StringField, StringProperty> scriptSetting =
- Setting.of( "Script", rScriptProperty() );
+ Setting.of( "Script", stringProperty( KEY_R_SCRIPT ) );
final StringField field = scriptSetting.getElement();
field.multiline( true );
get( "Preferences.r.directory" ),
Setting.of( label( "Preferences.r.directory.desc", false ) ),
- Setting.of( "Directory", rDirectoryProperty(), true )
+ Setting.of( "Directory", fileProperty( KEY_R_DIR ), true )
),
Group.of(
get( "Preferences.r.script" ),
Setting.of( label( "Preferences.r.script.desc" ) ),
scriptSetting
),
Group.of(
get( "Preferences.r.delimiter.began" ),
Setting.of( label( "Preferences.r.delimiter.began.desc" ) ),
- Setting.of( "Opening", rDelimiterBeganProperty() )
+ Setting.of( "Opening", stringProperty( KEY_R_DELIM_BEGAN ) )
),
Group.of(
get( "Preferences.r.delimiter.ended" ),
Setting.of( label( "Preferences.r.delimiter.ended.desc" ) ),
- Setting.of( "Closing", rDelimiterEndedProperty() )
+ Setting.of( "Closing", stringProperty( KEY_R_DELIM_ENDED ) )
)
),
Category.of(
get( "Preferences.images" ),
Group.of(
get( "Preferences.images.directory" ),
Setting.of( label( "Preferences.images.directory.desc" ) ),
- Setting.of( "Directory", imagesDirectoryProperty(), true )
+ Setting.of( "Directory", fileProperty( KEY_IMAGES_DIR ), true )
),
Group.of(
get( "Preferences.images.suffixes" ),
Setting.of( label( "Preferences.images.suffixes.desc" ) ),
- Setting.of( "Extensions", imagesOrderProperty() )
+ Setting.of( "Extensions", stringProperty( KEY_IMAGES_ORDER ) )
)
),
Category.of(
get( "Preferences.definitions" ),
Group.of(
get( "Preferences.definitions.path" ),
Setting.of( label( "Preferences.definitions.path.desc" ) ),
- Setting.of( "Path", definitionPathProperty(), false )
+ Setting.of( "Path", fileProperty( KEY_DEF_PATH ), false )
),
Group.of(
get( "Preferences.definitions.delimiter.began" ),
Setting.of( label(
"Preferences.definitions.delimiter.began.desc" ) ),
- Setting.of( "Opening", defDelimiterBeganProperty() )
+ Setting.of( "Opening", stringProperty( KEY_DEF_DELIM_BEGAN ) )
),
Group.of(
get( "Preferences.definitions.delimiter.ended" ),
Setting.of( label(
"Preferences.definitions.delimiter.ended.desc" ) ),
- Setting.of( "Closing", defDelimiterEnded() )
+ Setting.of( "Closing", stringProperty( KEY_DEF_DELIM_ENDED ) )
)
),
Category.of(
get( "Preferences.fonts" ),
Group.of(
get( "Preferences.fonts.size_editor" ),
Setting.of( label( "Preferences.fonts.size_editor.desc" ) ),
- Setting.of( "Points", fontsSizeEditorProperty() )
+ Setting.of( "Points", doubleProperty( KEY_UI_FONT_EDITOR_SIZE ) )
)
)
private Node label( final String key, final boolean interpolate ) {
return new Label( get( key, interpolate ) );
- }
-
- private UserPreferences getUserPreferences() {
- return UserPreferences.getInstance();
- }
-
- private PreferencesFx getPreferencesFx() {
- return mPreferencesFx;
- }
-
- public ObjectProperty<File> definitionPathProperty() {
- return getUserPreferences().definitionPathProperty();
- }
-
- private StringProperty defDelimiterBeganProperty() {
- return getUserPreferences().defDelimiterBeganProperty();
- }
-
- private StringProperty defDelimiterEnded() {
- return getUserPreferences().defDelimiterEndedProperty();
- }
-
- public ObjectProperty<File> rDirectoryProperty() {
- return getUserPreferences().rDirectoryProperty();
- }
-
- public StringProperty rScriptProperty() {
- return getUserPreferences().rScriptProperty();
}
- private StringProperty rDelimiterBeganProperty() {
- return getUserPreferences().rDelimiterBeganProperty();
+ private <T, U extends Property<T>> U objectProperty( final Key key ) {
+ return mWorkspace.valuesProperty( key );
}
- private StringProperty rDelimiterEndedProperty() {
- return getUserPreferences().rDelimiterEndedProperty();
+ private ObjectProperty<File> fileProperty( final Key key ) {
+ return objectProperty( key );
}
- private ObjectProperty<File> imagesDirectoryProperty() {
- return getUserPreferences().imagesDirectoryProperty();
+ private StringProperty stringProperty( final Key key ) {
+ return objectProperty( key );
}
- private StringProperty imagesOrderProperty() {
- return getUserPreferences().imagesOrderProperty();
+ @SuppressWarnings("SameParameterValue")
+ private DoubleProperty doubleProperty( final Key key ) {
+ return objectProperty( key );
}
- public IntegerProperty fontsSizeEditorProperty() {
- return getUserPreferences().fontsSizeEditorProperty();
+ private PreferencesFx getPreferencesFx() {
+ return mPreferencesFx;
}
}
src/main/java/com/keenwrite/preferences/Workspace.java
import com.keenwrite.Constants;
-import com.keenwrite.io.File;
import javafx.application.Platform;
import javafx.beans.property.*;
import org.apache.commons.configuration2.XMLConfiguration;
import org.apache.commons.configuration2.builder.fluent.Configurations;
import org.apache.commons.configuration2.ex.ConfigurationException;
import org.apache.commons.configuration2.io.FileHandler;
+import java.io.File;
import java.util.HashSet;
import java.util.Locale;
entry( KEY_UI_FONT_LOCALE, new SimpleLocaleProperty( LOCALE_DEFAULT ) ),
- entry( KEY_UI_FONT_EDITOR_SIZE, new SimpleFloatProperty( FONT_SIZE_EDITOR_DEFAULT ) ),
- entry( KEY_UI_FONT_PREVIEW_SIZE, new SimpleFloatProperty( FONT_SIZE_PREVIEW_DEFAULT ) ),
+ entry( KEY_UI_FONT_EDITOR_SIZE, new SimpleDoubleProperty( FONT_SIZE_EDITOR_DEFAULT ) ),
+ entry( KEY_UI_FONT_PREVIEW_SIZE, new SimpleDoubleProperty( FONT_SIZE_PREVIEW_DEFAULT ) ),
entry( KEY_UI_WINDOW_X, new SimpleDoubleProperty( WINDOW_X_DEFAULT ) ),
*/
@SuppressWarnings("unchecked")
- public <T> Property<T> valuesProperty( final Key key ) {
+ public <T, U extends Property<T>> U valuesProperty( final Key key ) {
// The type that goes into the map must come out.
- return (Property<T>) VALUES.get( key );
+ return (U) VALUES.get( key );
}