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.Logger;
import com.speedment.common.logger.LoggerManager; 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.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 Down Expand Up @@ -30,7 +30,7 @@
* *
* @author Simon * @author Simon
*/ */
public class AddRemoveStringItem extends AbstractLabelAndTooltipItem{ public class AddRemoveStringItem extends BaseLabelTooltipItem{
//*********************************************************** //***********************************************************
// VARIABLES // VARIABLES
//*********************************************************** //***********************************************************
Expand Down Expand Up @@ -65,7 +65,7 @@ public AddRemoveStringItem(String label, StringProperty value, String oldValue,
//*********************************************************** //***********************************************************


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


ListView<String> listView = new ListView<>(strings); 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.EnabledPropertyEditor;
import com.speedment.tool.property.editor.NullablePropertyEditor; import com.speedment.tool.property.editor.NullablePropertyEditor;
import com.speedment.tool.property.PropertyEditor; 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.ConnectionUrlPropertyEditor;
import com.speedment.tool.property.editor.IpAdressPropertyEditor; import com.speedment.tool.property.editor.IpAdressPropertyEditor;
import com.speedment.tool.property.editor.OrderTypePropertyEditor; 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.PackageNameEditor;
import com.speedment.tool.property.editor.PortNumberEditor; 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.TypeMapperPropertyEditor;
import com.speedment.tool.property.editor.UniquePropertyEditor; import com.speedment.tool.property.editor.UniquePropertyEditor;
import com.speedment.tool.property.editor.UsernamePropertyEditor; import com.speedment.tool.property.editor.UsernamePropertyEditor;
Expand All @@ -70,7 +71,6 @@ void installEditors() {
install(HasAliasProperty.class, HasAlias.ALIAS, AliasPropertyEditor::new); install(HasAliasProperty.class, HasAlias.ALIAS, AliasPropertyEditor::new);
install(HasNullableProperty.class, HasNullable.NULLABLE, NullablePropertyEditor::new); install(HasNullableProperty.class, HasNullable.NULLABLE, NullablePropertyEditor::new);
install(HasOrderTypeProperty.class, HasOrderType.ORDER_TYPE, OrderTypePropertyEditor::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.AUTO_INCREMENT, AutoIncrementPropertyEditor::new);
install(ColumnProperty.class, Column.TYPE_MAPPER, TypeMapperPropertyEditor::new); install(ColumnProperty.class, Column.TYPE_MAPPER, TypeMapperPropertyEditor::new);
install(DbmsProperty.class, Dbms.TYPE_NAME, DbmsTypePropertyEditor::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.USERNAME, UsernamePropertyEditor::new);
install(DbmsProperty.class, Dbms.CONNECTION_URL, ConnectionUrlPropertyEditor::new); install(DbmsProperty.class, Dbms.CONNECTION_URL, ConnectionUrlPropertyEditor::new);
install(IndexProperty.class, Index.UNIQUE, UniquePropertyEditor::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(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 @Override
Expand Down
Expand Up @@ -12,7 +12,11 @@ public interface PropertyEditor<T> {


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


Stream<PropertyEditor.Item> fieldsFor(T document); 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; 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 java.util.concurrent.atomic.AtomicInteger;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.geometry.HPos; import javafx.geometry.HPos;
Expand All @@ -17,9 +19,11 @@
final class PropertyLayout extends GridPane{ final class PropertyLayout extends GridPane{
private final static int MIN_LABEL_WIDTH = 100; private final static int MIN_LABEL_WIDTH = 100;
private final AtomicInteger index; private final AtomicInteger index;
private final Set<Editor> editors;


PropertyLayout(ObservableList<PropertyEditor.Item> properties){ PropertyLayout(ObservableList<PropertyEditor.Item> properties){
this.index = new AtomicInteger(0); 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(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)); 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){ 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() { 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; 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.config.ColumnProperty;
import com.speedment.tool.property.PropertyEditor; import com.speedment.tool.property.PropertyEditor;
import java.util.stream.Stream; import java.util.stream.Stream;
Expand All @@ -19,8 +19,7 @@ public class AutoIncrementPropertyEditor<T extends ColumnProperty> implements Pr


@Override @Override
public Stream<Item> fieldsFor(T document) { public Stream<Item> fieldsFor(T document) {
return Stream.of( return Stream.of(new SimpleCheckBoxItem(
new SimpleBooleanItem(
"Is Auto Incrementing", "Is Auto Incrementing",
document.autoIncrementProperty(), document.autoIncrementProperty(),
"If this column will increment automatically for each new entity.") "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; 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.runtime.config.trait.HasEnabled;
import com.speedment.tool.config.trait.HasEnabledProperty; import com.speedment.tool.config.trait.HasEnabledProperty;
import com.speedment.tool.property.PropertyEditor; import com.speedment.tool.property.PropertyEditor;
Expand All @@ -20,8 +20,7 @@ public class EnabledPropertyEditor<T extends HasEnabledProperty> implements Prop


@Override @Override
public Stream<PropertyEditor.Item> fieldsFor(T document) { public Stream<PropertyEditor.Item> fieldsFor(T document) {
return Stream.of( return Stream.of(new SimpleCheckBoxItem(
new SimpleBooleanItem(
"Enabled", "Enabled",
document.enabledProperty(), document.enabledProperty(),
"True if this node should be included in the code generation." "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.config.ForeignKeyColumnProperty;
import com.speedment.tool.property.PropertyEditor; 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; import java.util.stream.Stream;


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


@Override @Override
public Stream<PropertyEditor.Item> fieldsFor(T document) { public Stream<PropertyEditor.Item> fieldsFor(T document) {
return Stream.of( return Stream.of(new SimpleTextFieldItem(
new SimpleStringItem(
document.mainInterface().getSimpleName() + " Name", document.mainInterface().getSimpleName() + " Name",
document.nameProperty(), document.nameProperty(),
"The name of the persisted entity in the database. This should only be modified if the database has been changed!" "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; 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.runtime.config.trait.HasNullable;
import com.speedment.tool.config.trait.HasNullableProperty; import com.speedment.tool.config.trait.HasNullableProperty;
import com.speedment.tool.property.PropertyEditor; import com.speedment.tool.property.PropertyEditor;
Expand All @@ -20,8 +20,7 @@ public class NullablePropertyEditor<T extends HasNullableProperty> implements Pr


@Override @Override
public Stream<Item> fieldsFor(T document) { public Stream<Item> fieldsFor(T document) {
return Stream.of( return Stream.of(new SimpleCheckBoxItem(
new SimpleBooleanItem(
"Is nullable", "Is nullable",
document.nullableProperty(), document.nullableProperty(),
"If this node can hold 'null'-values or not." "If this node can hold 'null'-values or not."
Expand Down
@@ -1,12 +1,9 @@
package com.speedment.tool.property.editor; 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 static com.speedment.runtime.config.Project.DEFAULT_PACKAGE_LOCATION;
import com.speedment.tool.config.ProjectProperty; import com.speedment.tool.config.ProjectProperty;
import com.speedment.tool.property.PropertyEditor; import com.speedment.tool.property.PropertyEditor;
import com.speedment.tool.property.item.DefaultTextFieldItem; import com.speedment.tool.property.item.DefaultTextFieldItem;
import com.speedment.tool.property.item.SimpleStringItem;
import java.util.stream.Stream; import java.util.stream.Stream;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;


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

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


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


import com.speedment.tool.config.IndexProperty; import com.speedment.tool.config.IndexProperty;
import com.speedment.tool.property.PropertyEditor; 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; import java.util.stream.Stream;


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


@Override @Override
public Stream<Item> fieldsFor(T document) { public Stream<Item> fieldsFor(T document) {
return Stream.of( return Stream.of(new SimpleCheckBoxItem(
new SimpleBooleanItem(
"Is Unique", "Is Unique",
document.uniqueProperty(), document.uniqueProperty(),
"True if elements in this index are unique." "True if elements in this index are unique."
Expand Down
Expand Up @@ -5,7 +5,7 @@
*/ */
package com.speedment.tool.property.editor; 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.config.DbmsProperty;
import com.speedment.tool.property.PropertyEditor; import com.speedment.tool.property.PropertyEditor;
import java.util.stream.Stream; import java.util.stream.Stream;
Expand All @@ -19,8 +19,7 @@ public class UsernamePropertyEditor<T extends DbmsProperty> implements PropertyE


@Override @Override
public Stream<Item> fieldsFor(T document) { public Stream<Item> fieldsFor(T document) {
return Stream.of( return Stream.of(new SimpleTextFieldItem(
new SimpleStringItem(
"Username", "Username",
document.usernameProperty(), document.usernameProperty(),
"The username to use when connecting to the database." "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.