Skip to content

Commit

Permalink
Tool: Removed resource leak from property editors
Browse files Browse the repository at this point in the history
  • Loading branch information
Gikkman committed Jul 28, 2016
1 parent 3ff9e60 commit eec3b6d
Show file tree
Hide file tree
Showing 23 changed files with 163 additions and 107 deletions.
Expand Up @@ -2,7 +2,7 @@

import com.speedment.common.logger.Logger;
import com.speedment.common.logger.LoggerManager;
import com.speedment.tool.property.item.AbstractLabelAndTooltipItem;
import com.speedment.tool.property.item.BaseLabelTooltipItem;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
Expand Down Expand Up @@ -30,7 +30,7 @@
*
* @author Simon
*/
public class AddRemoveStringItem extends AbstractLabelAndTooltipItem{
public class AddRemoveStringItem extends BaseLabelTooltipItem{
//***********************************************************
// VARIABLES
//***********************************************************
Expand Down Expand Up @@ -65,7 +65,7 @@ public AddRemoveStringItem(String label, StringProperty value, String oldValue,
//***********************************************************

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

ListView<String> listView = new ListView<>(strings);
Expand Down
Expand Up @@ -39,12 +39,13 @@
import com.speedment.tool.property.editor.EnabledPropertyEditor;
import com.speedment.tool.property.editor.NullablePropertyEditor;
import com.speedment.tool.property.PropertyEditor;
import com.speedment.tool.property.editor.CompanyNamePropertyEditor;
import com.speedment.tool.property.editor.ConnectionUrlPropertyEditor;
import com.speedment.tool.property.editor.IpAdressPropertyEditor;
import com.speedment.tool.property.editor.OrderTypePropertyEditor;
import com.speedment.tool.property.editor.PackageLocationPropertyEditor;
import com.speedment.tool.property.editor.PackageNameEditor;
import com.speedment.tool.property.editor.PortNumberEditor;
import com.speedment.tool.property.editor.ProjectPropertyEditor;
import com.speedment.tool.property.editor.TypeMapperPropertyEditor;
import com.speedment.tool.property.editor.UniquePropertyEditor;
import com.speedment.tool.property.editor.UsernamePropertyEditor;
Expand All @@ -70,7 +71,6 @@ void installEditors() {
install(HasAliasProperty.class, HasAlias.ALIAS, AliasPropertyEditor::new);
install(HasNullableProperty.class, HasNullable.NULLABLE, NullablePropertyEditor::new);
install(HasOrderTypeProperty.class, HasOrderType.ORDER_TYPE, OrderTypePropertyEditor::new);
// install(HasColumnProperty.class, Column.NAME, ColumnPropertyEditor::new);
install(ColumnProperty.class, Column.AUTO_INCREMENT, AutoIncrementPropertyEditor::new);
install(ColumnProperty.class, Column.TYPE_MAPPER, TypeMapperPropertyEditor::new);
install(DbmsProperty.class, Dbms.TYPE_NAME, DbmsTypePropertyEditor::new);
Expand All @@ -79,8 +79,9 @@ void installEditors() {
install(DbmsProperty.class, Dbms.USERNAME, UsernamePropertyEditor::new);
install(DbmsProperty.class, Dbms.CONNECTION_URL, ConnectionUrlPropertyEditor::new);
install(IndexProperty.class, Index.UNIQUE, UniquePropertyEditor::new);
install(ProjectProperty.class, Project.COMPANY_NAME, CompanyNamePropertyEditor::new);
install(HasPackageNameProperty.class, HasPackageName.PACKAGE_NAME, PackageNameEditor::new);
install(ProjectProperty.class, Project.DEFAULT_PROJECT_NAME, ProjectPropertyEditor::new);
install(ProjectProperty.class, Project.PACKAGE_LOCATION, PackageLocationPropertyEditor::new);
}

@Override
Expand Down
Expand Up @@ -12,7 +12,11 @@ public interface PropertyEditor<T> {

interface Item{
Node getLabel();
Node getEditor();
Editor getEditor();
}
interface Editor{
Node getNode();
void onRemove();
}

Stream<PropertyEditor.Item> fieldsFor(T document);
Expand Down
13 changes: 10 additions & 3 deletions tool/src/main/java/com/speedment/tool/property/PropertyLayout.java
@@ -1,6 +1,8 @@
package com.speedment.tool.property;

import com.speedment.tool.property.PropertyEditor;
import com.speedment.tool.property.PropertyEditor.Editor;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import javafx.collections.ObservableList;
import javafx.geometry.HPos;
Expand All @@ -17,9 +19,11 @@
final class PropertyLayout extends GridPane{
private final static int MIN_LABEL_WIDTH = 100;
private final AtomicInteger index;
private final Set<Editor> editors;

PropertyLayout(ObservableList<PropertyEditor.Item> properties){
this.index = new AtomicInteger(0);
this.editors = new HashSet<>();

getColumnConstraints().add(0, new ColumnConstraints(MIN_LABEL_WIDTH, USE_COMPUTED_SIZE, USE_PREF_SIZE, Priority.NEVER, HPos.LEFT, true));
getColumnConstraints().add(1, new ColumnConstraints(USE_PREF_SIZE, USE_COMPUTED_SIZE, Double.MAX_VALUE, Priority.ALWAYS, HPos.LEFT, true));
Expand All @@ -30,10 +34,13 @@ final class PropertyLayout extends GridPane{
}

void addItem(PropertyEditor.Item item){
addRow(index.getAndIncrement(), item.getLabel(), item.getEditor());
final Editor editor = item.getEditor();

addRow(index.getAndIncrement(), item.getLabel(), editor.getNode());
editors.add(editor);
}

void remove() {
//Remove all nodes and make sure they can be GC'd
editors.stream().forEach( Editor::onRemove );
}
}
Expand Up @@ -5,7 +5,7 @@
*/
package com.speedment.tool.property.editor;

import com.speedment.tool.property.item.SimpleBooleanItem;
import com.speedment.tool.property.item.SimpleCheckBoxItem;
import com.speedment.tool.config.ColumnProperty;
import com.speedment.tool.property.PropertyEditor;
import java.util.stream.Stream;
Expand All @@ -19,8 +19,7 @@ public class AutoIncrementPropertyEditor<T extends ColumnProperty> implements Pr

@Override
public Stream<Item> fieldsFor(T document) {
return Stream.of(
new SimpleBooleanItem(
return Stream.of(new SimpleCheckBoxItem(
"Is Auto Incrementing",
document.autoIncrementProperty(),
"If this column will increment automatically for each new entity.")
Expand Down
@@ -0,0 +1,25 @@
package com.speedment.tool.property.editor;

import com.speedment.tool.config.ProjectProperty;
import com.speedment.tool.property.PropertyEditor;
import com.speedment.tool.property.item.SimpleTextFieldItem;
import java.util.stream.Stream;

/**
*
* @author Simon
* @param <T> the document type
*/
public class CompanyNamePropertyEditor <T extends ProjectProperty> implements PropertyEditor<T>{

@Override
public Stream<Item> fieldsFor(T document) {
return Stream.of(new SimpleTextFieldItem(
"Company Name",
document.companyNameProperty(),
"The company name that should be used for this project. It is used in the generated code."
)
);
}

}
Expand Up @@ -5,7 +5,7 @@
*/
package com.speedment.tool.property.editor;

import com.speedment.tool.property.item.SimpleBooleanItem;
import com.speedment.tool.property.item.SimpleCheckBoxItem;
import com.speedment.runtime.config.trait.HasEnabled;
import com.speedment.tool.config.trait.HasEnabledProperty;
import com.speedment.tool.property.PropertyEditor;
Expand All @@ -20,8 +20,7 @@ public class EnabledPropertyEditor<T extends HasEnabledProperty> implements Prop

@Override
public Stream<PropertyEditor.Item> fieldsFor(T document) {
return Stream.of(
new SimpleBooleanItem(
return Stream.of(new SimpleCheckBoxItem(
"Enabled",
document.enabledProperty(),
"True if this node should be included in the code generation."
Expand Down
Expand Up @@ -2,7 +2,7 @@

import com.speedment.tool.config.ForeignKeyColumnProperty;
import com.speedment.tool.property.PropertyEditor;
import com.speedment.tool.property.item.SimpleStringItem;
import com.speedment.tool.property.item.SimpleTextFieldItem;
import java.util.stream.Stream;

/**
Expand All @@ -15,23 +15,22 @@ public class ForeignKeyColumnEditor<T extends ForeignKeyColumnProperty> implemen
@Override
public Stream<Item> fieldsFor(T document) {
//TODO> Split editor into multiple editors
return Stream.of(
new SimpleStringItem(
return Stream.of(new SimpleTextFieldItem(
"Foreign Database Name",
document.foreignDatabaseNameProperty(),
"The name of the database that this foreign key references."
),
new SimpleStringItem(
new SimpleTextFieldItem(
"Foreign Schema Name",
document.foreignSchemaNameProperty(),
"The name of the schema that this foreign key references."
),
new SimpleStringItem(
new SimpleTextFieldItem(
"Foreign Table Name",
document.foreignTableNameProperty(),
"The name of the database table that this foreign key references."
),
new SimpleStringItem(
new SimpleTextFieldItem(
"Foreign Column Name",
document.foreignColumnNameProperty(),
"The name of the database column that this foreign key references."
Expand Down
@@ -1,6 +1,6 @@
package com.speedment.tool.property.editor;

import com.speedment.tool.property.item.SimpleStringItem;
import com.speedment.tool.property.item.SimpleTextFieldItem;
import com.speedment.tool.config.trait.HasNameProperty;
import com.speedment.tool.property.PropertyEditor;
import java.util.stream.Stream;
Expand All @@ -14,8 +14,7 @@ public class NamePropertyEditor<T extends HasNameProperty> implements PropertyEd

@Override
public Stream<PropertyEditor.Item> fieldsFor(T document) {
return Stream.of(
new SimpleStringItem(
return Stream.of(new SimpleTextFieldItem(
document.mainInterface().getSimpleName() + " Name",
document.nameProperty(),
"The name of the persisted entity in the database. This should only be modified if the database has been changed!"
Expand Down
Expand Up @@ -5,7 +5,7 @@
*/
package com.speedment.tool.property.editor;

import com.speedment.tool.property.item.SimpleBooleanItem;
import com.speedment.tool.property.item.SimpleCheckBoxItem;
import com.speedment.runtime.config.trait.HasNullable;
import com.speedment.tool.config.trait.HasNullableProperty;
import com.speedment.tool.property.PropertyEditor;
Expand All @@ -20,8 +20,7 @@ public class NullablePropertyEditor<T extends HasNullableProperty> implements Pr

@Override
public Stream<Item> fieldsFor(T document) {
return Stream.of(
new SimpleBooleanItem(
return Stream.of(new SimpleCheckBoxItem(
"Is nullable",
document.nullableProperty(),
"If this node can hold 'null'-values or not."
Expand Down
@@ -1,12 +1,9 @@
package com.speedment.tool.property.editor;

import com.speedment.common.injector.Injector;
import com.speedment.common.injector.annotation.Inject;
import static com.speedment.runtime.config.Project.DEFAULT_PACKAGE_LOCATION;
import com.speedment.tool.config.ProjectProperty;
import com.speedment.tool.property.PropertyEditor;
import com.speedment.tool.property.item.DefaultTextFieldItem;
import com.speedment.tool.property.item.SimpleStringItem;
import java.util.stream.Stream;
import javafx.beans.property.SimpleStringProperty;

Expand All @@ -15,17 +12,11 @@
* @author Simon
* @param <T> the document type
*/
public class ProjectPropertyEditor<T extends ProjectProperty> implements PropertyEditor<T>{
//TODO: Split into different editor classses
private @Inject Injector injector;

public class PackageLocationPropertyEditor <T extends ProjectProperty> implements PropertyEditor<T>{

@Override
public Stream<Item> fieldsFor(T document) {
return Stream.of(new SimpleStringItem(
"Company Name",
document.companyNameProperty(),
"The company name that should be used for this project. It is used in the generated code."
),
return Stream.of(
new DefaultTextFieldItem(
"Package Location",
new SimpleStringProperty(DEFAULT_PACKAGE_LOCATION),
Expand Down
Expand Up @@ -10,7 +10,7 @@
import com.speedment.runtime.internal.util.document.DocumentDbUtil;
import com.speedment.tool.config.DbmsProperty;
import com.speedment.tool.property.PropertyEditor;
import com.speedment.tool.property.item.DefaultIntegerItem;
import com.speedment.tool.property.item.DefaultSpinnerItem;
import java.util.stream.Stream;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.IntegerBinding;
Expand All @@ -25,8 +25,7 @@ public class PortNumberEditor<T extends DbmsProperty> implements PropertyEditor<

@Override
public Stream<Item> fieldsFor(T document) {
return Stream.of(
new DefaultIntegerItem(
return Stream.of(new DefaultSpinnerItem(
"Port",
defaultPortProperty(document, dbmsHandler),
document.portProperty(),
Expand Down
Expand Up @@ -7,7 +7,7 @@

import com.speedment.tool.config.IndexProperty;
import com.speedment.tool.property.PropertyEditor;
import com.speedment.tool.property.item.SimpleBooleanItem;
import com.speedment.tool.property.item.SimpleCheckBoxItem;
import java.util.stream.Stream;

/**
Expand All @@ -18,8 +18,7 @@ public class UniquePropertyEditor<T extends IndexProperty> implements PropertyEd

@Override
public Stream<Item> fieldsFor(T document) {
return Stream.of(
new SimpleBooleanItem(
return Stream.of(new SimpleCheckBoxItem(
"Is Unique",
document.uniqueProperty(),
"True if elements in this index are unique."
Expand Down
Expand Up @@ -5,7 +5,7 @@
*/
package com.speedment.tool.property.editor;

import com.speedment.tool.property.item.SimpleStringItem;
import com.speedment.tool.property.item.SimpleTextFieldItem;
import com.speedment.tool.config.DbmsProperty;
import com.speedment.tool.property.PropertyEditor;
import java.util.stream.Stream;
Expand All @@ -19,8 +19,7 @@ public class UsernamePropertyEditor<T extends DbmsProperty> implements PropertyE

@Override
public Stream<Item> fieldsFor(T document) {
return Stream.of(
new SimpleStringItem(
return Stream.of(new SimpleTextFieldItem(
"Username",
document.usernameProperty(),
"The username to use when connecting to the database."
Expand Down

This file was deleted.

0 comments on commit eec3b6d

Please sign in to comment.