Skip to content

Commit

Permalink
Tool: More work to remove ControlsFx dependency
Browse files Browse the repository at this point in the history
  • Loading branch information
Gikkman committed Jul 28, 2016
1 parent a1c8e41 commit 4f2e169
Show file tree
Hide file tree
Showing 65 changed files with 1,299 additions and 697 deletions.
Expand Up @@ -36,8 +36,10 @@
import static com.speedment.common.codegen.internal.util.Formatting.ucfirst; import static com.speedment.common.codegen.internal.util.Formatting.ucfirst;
import com.speedment.common.injector.Injector; import com.speedment.common.injector.Injector;
import com.speedment.generator.typetoken.TypeTokenGenerator; import com.speedment.generator.typetoken.TypeTokenGenerator;
import static com.speedment.runtime.config.Project.DEFAULT_PACKAGE_NAME;
import static com.speedment.runtime.internal.util.document.DocumentUtil.Name.JAVA_NAME; import static com.speedment.runtime.internal.util.document.DocumentUtil.Name.JAVA_NAME;
import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;
import java.util.function.Supplier;


/** /**
* A support class for the {@link Translator} interface that holds various * A support class for the {@link Translator} interface that holds various
Expand Down Expand Up @@ -375,13 +377,23 @@ public String basePackageName() {
return table().flatMap(Table::getPackageName).orElseGet(this::defaultPackageName); return table().flatMap(Table::getPackageName).orElseGet(this::defaultPackageName);
} }


private String defaultPackageName() { public String defaultPackageName() {
final String packName = namer().findPackageName(projectOrThrow()) + "."; final Supplier<String> projectPackage = () ->
DEFAULT_PACKAGE_NAME +
namer().javaPackageName(projectOrThrow().getCompanyName()) + "." +
namer().javaPackageName(projectOrThrow().getName());


if (document() instanceof Project) { if (document() instanceof Project) {
return packName + namer().javaPackageName(projectOrThrow().getName()); return projectPackage.get();
} else { } else {
return packName + DocumentUtil.relativeName(document(), Project.class, JAVA_NAME, namer()::javaPackageName); return projectOrThrow().getPackageName()
.orElseGet(projectPackage) + "." +
DocumentUtil.relativeName(
document(),
Dbms.class,
JAVA_NAME,
namer()::javaPackageName
);
} }
} }


Expand Down
Expand Up @@ -180,10 +180,4 @@ static String toHumanReadable(final String javaName) {
.map(String::toLowerCase) .map(String::toLowerCase)
.map(s -> ucfirst(s)).collect(Collectors.joining(" ")); .map(s -> ucfirst(s)).collect(Collectors.joining(" "));
} }

default String findPackageName(Project project) {
return project.getPackageName().orElseGet(() ->
DEFAULT_PACKAGE_NAME + javaPackageName(project.getCompanyName())
);
}
} }
Expand Up @@ -12,19 +12,15 @@
import com.speedment.generator.component.CodeGenerationComponent; import com.speedment.generator.component.CodeGenerationComponent;
import com.speedment.generator.component.EventComponent; import com.speedment.generator.component.EventComponent;
import com.speedment.generator.component.TypeMapperComponent; import com.speedment.generator.component.TypeMapperComponent;
import com.speedment.plugins.enums.internal.ui.CommaSeparatedStringPropertyItem; import com.speedment.plugins.enums.internal.newUi.CommaSeparatedStringEditor;
import com.speedment.runtime.config.Column;
import com.speedment.runtime.config.Table; import com.speedment.runtime.config.Table;
import com.speedment.runtime.internal.component.AbstractComponent; import com.speedment.runtime.internal.component.AbstractComponent;
import com.speedment.runtime.internal.license.AbstractSoftware; import com.speedment.runtime.internal.license.AbstractSoftware;
import static com.speedment.runtime.internal.license.OpenSourceLicense.APACHE_2; import static com.speedment.runtime.internal.license.OpenSourceLicense.APACHE_2;
import com.speedment.runtime.license.Software; import com.speedment.runtime.license.Software;
import com.speedment.tool.component.UserInterfaceComponent; import com.speedment.tool.component.PropertyEditorComponent;
import com.speedment.tool.config.ColumnProperty; import com.speedment.tool.config.ColumnProperty;
import com.speedment.tool.config.DocumentProperty;
import com.speedment.tool.event.TreeSelectionChange;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.BooleanBinding;
import javafx.scene.control.TreeItem;


/** /**
* A plugin for generating internal enums for columns marked as ENUM in the * A plugin for generating internal enums for columns marked as ENUM in the
Expand All @@ -47,34 +43,14 @@ public final class EnumGeneratorComponent extends AbstractComponent {
@ExecuteBefore(RESOLVED) @ExecuteBefore(RESOLVED)
void installDecorators(Injector injector, void installDecorators(Injector injector,
@WithState(INITIALIZED) TypeMapperComponent typeMappers, @WithState(INITIALIZED) TypeMapperComponent typeMappers,
@WithState(INITIALIZED) CodeGenerationComponent codeGen){ @WithState(INITIALIZED) CodeGenerationComponent codeGen,
@WithState(RESOLVED) PropertyEditorComponent editors){


typeMappers.install(String.class, StringToEnumTypeMapper::new); typeMappers.install(String.class, StringToEnumTypeMapper::new);
codeGen.add(Table.class, StandardTranslatorKey.GENERATED_ENTITY, new GeneratedEntityDecorator(injector)); codeGen.add(Table.class, StandardTranslatorKey.GENERATED_ENTITY, new GeneratedEntityDecorator(injector));


events.on(TreeSelectionChange.class, ev -> { editors.install(ColumnProperty.class, Column.ENUM_CONSTANTS, CommaSeparatedStringEditor::new);
if (!ev.changeEvent().getList().isEmpty()) {
final TreeItem<DocumentProperty> treeItem = ev.changeEvent().getList().get(0);
if (treeItem != null) {
final DocumentProperty doc = treeItem.getValue();
if (doc instanceof ColumnProperty) {
final ColumnProperty col = (ColumnProperty) doc;

final BooleanBinding isNotEnumMapper = Bindings.notEqual(col.typeMapperProperty(), StringToEnumTypeMapper.class.getName());
ev.properties().add(new CommaSeparatedStringPropertyItem(
col.enumConstantsProperty(),
col.getEnumConstants().orElse(null),
"Enum Constants",
"Used for defining what value the enum can take",
editor -> {
editor.disableProperty().bind(isNotEnumMapper);
}
)
);
}
}
}
});
} }


@Override @Override
Expand Down
@@ -1,7 +1,8 @@
package com.speedment.plugins.enums.internal.ui; package com.speedment.plugins.enums.internal.newUi;


import com.speedment.common.logger.Logger; import com.speedment.common.logger.Logger;
import com.speedment.common.logger.LoggerManager; import com.speedment.common.logger.LoggerManager;
import com.speedment.tool.property.item.AbstractLabelAndTooltipItem;
import java.util.Set; import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
Expand All @@ -11,6 +12,8 @@
import javafx.animation.AnimationTimer; import javafx.animation.AnimationTimer;
import javafx.beans.binding.Bindings; import javafx.beans.binding.Bindings;
import javafx.beans.binding.StringBinding; import javafx.beans.binding.StringBinding;
import javafx.beans.property.StringProperty;
import javafx.beans.value.ObservableBooleanValue;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.geometry.Pos; import javafx.geometry.Pos;
Expand All @@ -19,38 +22,52 @@
import javafx.scene.control.ListView; import javafx.scene.control.ListView;
import javafx.scene.control.cell.TextFieldListCell; import javafx.scene.control.cell.TextFieldListCell;
import javafx.scene.layout.HBox; import javafx.scene.layout.HBox;
import static javafx.scene.layout.Region.USE_PREF_SIZE;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
import javafx.util.StringConverter; import javafx.util.StringConverter;
import org.controlsfx.property.editor.PropertyEditor;


/** /**
* The editor object for editing a string. The editor consists of several *
* rows, and the input on each row can be retrieved as a single string. The * @author Simon
* different rows data is separated by commas.
*
*
*/ */
public final class CommaSeparatedStringEditor extends VBox implements PropertyEditor<String> { public class AddRemoveStringItem extends AbstractLabelAndTooltipItem{
//*********************************************************** //***********************************************************
// VARIABLES // VARIABLES
//*********************************************************** //***********************************************************
private final static Logger LOGGER = LoggerManager.getLogger(CommaSeparatedStringEditor.class); private final static Logger LOGGER = LoggerManager.getLogger(CommaSeparatedStringEditor.class);

private final ObservableList<String> strings;
private final ObservableBooleanValue disabled;
private final StringProperty value;


private final String DEFAULT_FIELD = "ENUM_CONSTANT_"; private final String DEFAULT_FIELD = "ENUM_CONSTANT_";
private final double SPACING = 10.0; private final double SPACING = 10.0;
private final int LIST_HEIGHT = 200; private final int LIST_HEIGHT = 200;


private final ObservableList<String> strings;
private final StringBinding binding;

//*********************************************************** //***********************************************************
// CONSTRUCTOR // CONSTRUCTOR
//*********************************************************** //***********************************************************
public CommaSeparatedStringEditor(String defaultValue) {
public AddRemoveStringItem(String label, StringProperty value, String oldValue, String tooltip, ObservableBooleanValue enableThis) {
super(label, tooltip);
this.strings = FXCollections.observableArrayList(); this.strings = FXCollections.observableArrayList();
this.binding = Bindings.createStringBinding(() -> getFormatedString(), strings); this.value = value;
setValue(defaultValue); this.disabled = Bindings.not(enableThis);


StringBinding binding = Bindings.createStringBinding(() -> getFormatedString(), strings);
value.bind( binding );

setValue( oldValue );
}

//***********************************************************
// PUBLIC
//***********************************************************

@Override
public Node getEditor() {
final VBox container = new VBox();

ListView<String> listView = new ListView<>(strings); ListView<String> listView = new ListView<>(strings);
listView.setCellFactory((ListView<String> param) -> new EnumCell()); listView.setCellFactory((ListView<String> param) -> new EnumCell());
listView.setEditable(true); listView.setEditable(true);
Expand All @@ -62,40 +79,27 @@ public CommaSeparatedStringEditor(String defaultValue) {
controls.setAlignment(Pos.CENTER); controls.setAlignment(Pos.CENTER);
controls.getChildren().addAll(addButton(listView), removeButton(listView)); controls.getChildren().addAll(addButton(listView), removeButton(listView));


setSpacing(SPACING); container.setSpacing(SPACING);
getChildren().addAll(listView, controls); container.disableProperty().bind( disabled );
container.getChildren().addAll(listView, controls);
return container;
} }

//*********************************************************** //***********************************************************
// PUBLIC // PRIVATE
//*********************************************************** //***********************************************************
@Override
public ObservableList<Node> getChildren() { private String getFormatedString() {
return super.getChildren(); String formated = strings.stream()
}

public StringBinding binding() {
return binding;
}

public String getFormatedString() {
return strings.stream()
.filter(v -> !v.isEmpty()) .filter(v -> !v.isEmpty())
.collect(Collectors.joining(",")); .collect(Collectors.joining(","));
if( formated == null || formated.isEmpty() )
return null;
else
return formated;
} }


@Override private void setValue(String value) {
public Node getEditor() {
return this;
}

@Override
public String getValue() {
return getFormatedString();
}

@Override
public void setValue(String value) {
if (value == null) { if (value == null) {
strings.clear(); strings.clear();
} else { } else {
Expand All @@ -105,10 +109,7 @@ public void setValue(String value) {
); );
} }
} }


//***********************************************************
// PRIVATE
//***********************************************************
private Button removeButton(final ListView<String> listView) { private Button removeButton(final ListView<String> listView) {
final Button button = new Button("Remove Selected"); final Button button = new Button("Remove Selected");
button.setOnAction(e -> { button.setOnAction(e -> {
Expand Down
@@ -0,0 +1,27 @@
package com.speedment.plugins.enums.internal.newUi;

import com.speedment.plugins.enums.StringToEnumTypeMapper;
import com.speedment.tool.config.ColumnProperty;
import com.speedment.tool.property.PropertyEditor;
import java.util.stream.Stream;
import javafx.beans.binding.Bindings;

/**
*
* @author Simon
*/
public class CommaSeparatedStringEditor<T extends ColumnProperty> implements PropertyEditor<T>{

@Override
public Stream<Item> fieldsFor(T document) {
return Stream.of(
new AddRemoveStringItem(
"Enum Constants",
document.enumConstantsProperty(),
document.getEnumConstants().orElse(null),
"Used for defining what value the enum can take",
Bindings.equal(document.typeMapperProperty(), StringToEnumTypeMapper.class.getName())
)
);
}
}

This file was deleted.

@@ -0,0 +1,46 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.speedment.plugins.reactor.internal.component;

import com.speedment.common.injector.annotation.Inject;
import com.speedment.generator.component.TypeMapperComponent;
import static com.speedment.plugins.reactor.internal.util.ReactorComponentUtil.validMergingColumns;
import com.speedment.runtime.config.Column;
import com.speedment.tool.config.TableProperty;
import com.speedment.tool.property.PropertyEditor;
import com.speedment.tool.property.item.ChoiceBoxItem;
import static java.util.stream.Collectors.toList;
import java.util.stream.Stream;
import static javafx.collections.FXCollections.observableList;

/**
*
* @author Simon
*/
class MergeOnEditor<T extends TableProperty> implements PropertyEditor<T>{

private @Inject TypeMapperComponent typeMappers;

@Override
public Stream<Item> fieldsFor(T document) {

return Stream.of(
new ChoiceBoxItem<>(
"Merge event on",
document.stringPropertyOf(ReactorComponentImpl.MERGE_ON, () -> null),
observableList(
validMergingColumns(document, typeMappers)
.stream()
.map(Column::getJavaName)
.collect(toList())
),
"This column will be used to merge events in a " +
"materialized object view (MOV) so that only the " +
"most recent revision of an entity is visible."
)
);
}
}

0 comments on commit 4f2e169

Please sign in to comment.