Skip to content

Commit

Permalink
Use set instead of map to store children
Browse files Browse the repository at this point in the history
  • Loading branch information
Emil Forslund committed Nov 23, 2015
1 parent 348f578 commit c0f1e6f
Show file tree
Hide file tree
Showing 7 changed files with 90 additions and 116 deletions.
Expand Up @@ -23,13 +23,12 @@
import com.speedment.internal.core.config.ChildHolder; import com.speedment.internal.core.config.ChildHolder;
import com.speedment.internal.util.Trees; import com.speedment.internal.util.Trees;
import static com.speedment.internal.util.Trees.TraversalOrder.BREADTH_FIRST; import static com.speedment.internal.util.Trees.TraversalOrder.BREADTH_FIRST;
import com.speedment.stream.MapStream;
import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.function.Function; import java.util.function.Function;
import static java.util.stream.Collectors.toSet; import static java.util.stream.Collectors.toSet;
import java.util.stream.Stream; import java.util.stream.Stream;
import static javafx.collections.FXCollections.observableMap; import static javafx.collections.FXCollections.observableSet;
import javafx.collections.ObservableSet; import javafx.collections.ObservableSet;


/** /**
Expand Down Expand Up @@ -78,7 +77,7 @@ public <T extends Node> Stream<T> traverseOver(Class<T> childType) {
.filter(t -> childType.isAssignableFrom(t.getClass())) .filter(t -> childType.isAssignableFrom(t.getClass()))
.map(t -> (T) t); .map(t -> (T) t);
} }

protected IllegalArgumentException wrongChildTypeException(Class<?> childType) { protected IllegalArgumentException wrongChildTypeException(Class<?> childType) {
return new IllegalArgumentException( return new IllegalArgumentException(
getClass().getSimpleName() + getClass().getSimpleName() +
Expand Down
20 changes: 7 additions & 13 deletions src/main/java/com/speedment/internal/gui/config/DbmsProperty.java
Expand Up @@ -37,7 +37,7 @@
import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty; import javafx.beans.property.StringProperty;
import static javafx.collections.FXCollections.observableMap; import static javafx.collections.FXCollections.observableSet;
import javafx.collections.ObservableSet; import javafx.collections.ObservableSet;


/** /**
Expand All @@ -58,7 +58,7 @@ public final class DbmsProperty extends AbstractParentProperty<Dbms, Schema> imp


public DbmsProperty(Speedment speedment) { public DbmsProperty(Speedment speedment) {
super(speedment); super(speedment);
schemaChildren = observableMap(newSetFromMap(new ConcurrentSkipListMap<>())); schemaChildren = observableSet(newSetFromMap(new ConcurrentSkipListMap<>()));
ipAddress = new SimpleStringProperty(); ipAddress = new SimpleStringProperty();
port = new SimpleIntegerProperty(); port = new SimpleIntegerProperty();
username = new SimpleStringProperty(); username = new SimpleStringProperty();
Expand Down Expand Up @@ -191,20 +191,20 @@ public Schema schema(Closure<?> c) {


@Override @Override
public Optional<Schema> add(Schema child) throws IllegalStateException { public Optional<Schema> add(Schema child) throws IllegalStateException {
return Optional.ofNullable(schemaChildren.put(child.getName(), child)); return schemaChildren.add(child) ? Optional.empty() : Optional.of(child);
} }


@Override @Override
public Stream<Schema> stream() { public Stream<Schema> stream() {
return MapStream.of(schemaChildren).values(); return schemaChildren.stream();
} }


@Override @Override
public <T extends Schema> Stream<T> streamOf(Class<T> childType) { public <T extends Schema> Stream<T> streamOf(Class<T> childType) {
requireNonNull(childType); requireNonNull(childType);


if (Schema.class.isAssignableFrom(childType)) { if (Schema.class.isAssignableFrom(childType)) {
return (Stream<T>) schemaChildren.values().stream(); return (Stream<T>) schemaChildren.stream();
} else { } else {
throw wrongChildTypeException(childType); throw wrongChildTypeException(childType);
} }
Expand All @@ -229,17 +229,11 @@ public <T extends Schema> T find(Class<T> childType, String name) throws Speedme
requireNonNull(childType); requireNonNull(childType);
requireNonNull(name); requireNonNull(name);


final T node;
if (Schema.class.isAssignableFrom(childType)) { if (Schema.class.isAssignableFrom(childType)) {
node = (T) schemaChildren.get(name); return (T) schemaChildren.stream().filter(child -> name.equals(child.getName()))
.findAny().orElseThrow(() -> noChildWithNameException(childType, name));
} else { } else {
throw wrongChildTypeException(childType); throw wrongChildTypeException(childType);
} }

if (node != null) {
return node;
} else {
throw noChildWithNameException(childType, name);
}
} }
} }
Expand Up @@ -25,26 +25,27 @@
import com.speedment.internal.core.config.utils.ConfigUtil; import com.speedment.internal.core.config.utils.ConfigUtil;
import com.speedment.stream.MapStream; import com.speedment.stream.MapStream;
import groovy.lang.Closure; import groovy.lang.Closure;
import static java.util.Collections.newSetFromMap;
import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.ConcurrentSkipListMap;
import java.util.stream.Stream; import java.util.stream.Stream;
import static javafx.collections.FXCollections.observableMap; import static javafx.collections.FXCollections.observableSet;
import javafx.collections.ObservableMap; import javafx.collections.ObservableSet;


/** /**
* *
* @author Emil Forslund * @author Emil Forslund
*/ */
public final class ForeignKeyProperty extends AbstractParentProperty<ForeignKey, ForeignKeyColumn> implements ForeignKey, ChildHelper<ForeignKey, Table> { public final class ForeignKeyProperty extends AbstractParentProperty<ForeignKey, ForeignKeyColumn> implements ForeignKey, ChildHelper<ForeignKey, Table> {


private final ObservableMap<String, ForeignKeyColumn> foreignKeyColumnChildren; private final ObservableSet<ForeignKeyColumn> foreignKeyColumnChildren;


private Table parent; private Table parent;


public ForeignKeyProperty(Speedment speedment) { public ForeignKeyProperty(Speedment speedment) {
super(speedment); super(speedment);
foreignKeyColumnChildren = observableMap(new ConcurrentSkipListMap<>()); foreignKeyColumnChildren = observableSet(newSetFromMap(new ConcurrentSkipListMap<>()));
} }


public ForeignKeyProperty(Speedment speedment, ForeignKey prototype) { public ForeignKeyProperty(Speedment speedment, ForeignKey prototype) {
Expand Down Expand Up @@ -81,20 +82,20 @@ public ForeignKeyColumn foreignKeyColumn(Closure<?> c) {


@Override @Override
public Optional<ForeignKeyColumn> add(ForeignKeyColumn child) throws IllegalStateException { public Optional<ForeignKeyColumn> add(ForeignKeyColumn child) throws IllegalStateException {
return Optional.ofNullable(foreignKeyColumnChildren.put(child.getName(), child)); return foreignKeyColumnChildren.add(child) ? Optional.empty() : Optional.of(child);
} }


@Override @Override
public Stream<ForeignKeyColumn> stream() { public Stream<ForeignKeyColumn> stream() {
return MapStream.of(foreignKeyColumnChildren).values(); return foreignKeyColumnChildren.stream();
} }


@Override @Override
public <T extends ForeignKeyColumn> Stream<T> streamOf(Class<T> childType) { public <T extends ForeignKeyColumn> Stream<T> streamOf(Class<T> childType) {
requireNonNull(childType); requireNonNull(childType);


if (ForeignKeyColumn.class.isAssignableFrom(childType)) { if (ForeignKeyColumn.class.isAssignableFrom(childType)) {
return (Stream<T>) foreignKeyColumnChildren.values().stream(); return (Stream<T>) foreignKeyColumnChildren.stream();
} else { } else {
throw wrongChildTypeException(childType); throw wrongChildTypeException(childType);
} }
Expand All @@ -119,17 +120,11 @@ public <T extends ForeignKeyColumn> T find(Class<T> childType, String name) thro
requireNonNull(childType); requireNonNull(childType);
requireNonNull(name); requireNonNull(name);


final T node;
if (ForeignKeyColumn.class.isAssignableFrom(childType)) { if (ForeignKeyColumn.class.isAssignableFrom(childType)) {
node = (T) foreignKeyColumnChildren.get(name); return (T) foreignKeyColumnChildren.stream().filter(child -> name.equals(child.getName()))
.findAny().orElseThrow(() -> noChildWithNameException(childType, name));
} else { } else {
throw wrongChildTypeException(childType); throw wrongChildTypeException(childType);
} }

if (node != null) {
return node;
} else {
throw noChildWithNameException(childType, name);
}
} }
} }
27 changes: 11 additions & 16 deletions src/main/java/com/speedment/internal/gui/config/IndexProperty.java
Expand Up @@ -23,31 +23,31 @@
import com.speedment.config.aspects.Parent; import com.speedment.config.aspects.Parent;
import com.speedment.exception.SpeedmentException; import com.speedment.exception.SpeedmentException;
import com.speedment.internal.core.config.utils.ConfigUtil; import com.speedment.internal.core.config.utils.ConfigUtil;
import com.speedment.stream.MapStream;
import groovy.lang.Closure; import groovy.lang.Closure;
import static java.util.Collections.newSetFromMap;
import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.ConcurrentSkipListMap;
import java.util.stream.Stream; import java.util.stream.Stream;
import javafx.beans.property.BooleanProperty; import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleBooleanProperty;
import static javafx.collections.FXCollections.observableMap; import static javafx.collections.FXCollections.observableSet;
import javafx.collections.ObservableMap; import javafx.collections.ObservableSet;


/** /**
* *
* @author Emil Forslund * @author Emil Forslund
*/ */
public final class IndexProperty extends AbstractParentProperty<Index, IndexColumn> implements Index, ChildHelper<Index, Table> { public final class IndexProperty extends AbstractParentProperty<Index, IndexColumn> implements Index, ChildHelper<Index, Table> {


private final ObservableMap<String, IndexColumn> indexColumnChildren; private final ObservableSet<IndexColumn> indexColumnChildren;
private final BooleanProperty unique; private final BooleanProperty unique;


private Table parent; private Table parent;


public IndexProperty(Speedment speedment) { public IndexProperty(Speedment speedment) {
super(speedment); super(speedment);
indexColumnChildren = observableMap(new ConcurrentSkipListMap<>()); indexColumnChildren = observableSet(newSetFromMap(new ConcurrentSkipListMap<>()));
unique = new SimpleBooleanProperty(); unique = new SimpleBooleanProperty();
} }


Expand Down Expand Up @@ -100,20 +100,21 @@ public IndexColumn indexColumn(Closure<?> c) {


@Override @Override
public Optional<IndexColumn> add(IndexColumn child) throws IllegalStateException { public Optional<IndexColumn> add(IndexColumn child) throws IllegalStateException {
return Optional.ofNullable(indexColumnChildren.put(child.getName(), child)); requireNonNull(child);
return indexColumnChildren.add(child) ? Optional.empty() : Optional.of(child);
} }


@Override @Override
public Stream<IndexColumn> stream() { public Stream<IndexColumn> stream() {
return MapStream.of(indexColumnChildren).values(); return indexColumnChildren.stream();
} }


@Override @Override
public <T extends IndexColumn> Stream<T> streamOf(Class<T> childType) { public <T extends IndexColumn> Stream<T> streamOf(Class<T> childType) {
requireNonNull(childType); requireNonNull(childType);


if (IndexColumn.class.isAssignableFrom(childType)) { if (IndexColumn.class.isAssignableFrom(childType)) {
return (Stream<T>) indexColumnChildren.values().stream(); return (Stream<T>) indexColumnChildren.stream();
} else { } else {
throw wrongChildTypeException(childType); throw wrongChildTypeException(childType);
} }
Expand All @@ -138,17 +139,11 @@ public <T extends IndexColumn> T find(Class<T> childType, String name) throws Sp
requireNonNull(childType); requireNonNull(childType);
requireNonNull(name); requireNonNull(name);


final T node;
if (IndexColumn.class.isAssignableFrom(childType)) { if (IndexColumn.class.isAssignableFrom(childType)) {
node = (T) indexColumnChildren.get(name); return (T) indexColumnChildren.stream().filter(child -> name.equals(child.getName()))
.findAny().orElseThrow(() -> noChildWithNameException(childType, name));
} else { } else {
throw wrongChildTypeException(childType); throw wrongChildTypeException(childType);
} }

if (node != null) {
return node;
} else {
throw noChildWithNameException(childType, name);
}
} }
} }
Expand Up @@ -26,27 +26,28 @@
import com.speedment.config.aspects.Parent; import com.speedment.config.aspects.Parent;
import com.speedment.exception.SpeedmentException; import com.speedment.exception.SpeedmentException;
import com.speedment.internal.core.config.utils.ConfigUtil; import com.speedment.internal.core.config.utils.ConfigUtil;
import com.speedment.stream.MapStream;
import groovy.lang.Closure; import groovy.lang.Closure;
import java.nio.file.Path; import java.nio.file.Path;
import static java.util.Collections.newSetFromMap;
import static java.util.Comparator.comparing;
import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.ConcurrentSkipListMap;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Stream; import java.util.stream.Stream;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty; import javafx.beans.property.StringProperty;
import static javafx.collections.FXCollections.observableMap; import static javafx.collections.FXCollections.observableSet;
import javafx.collections.ObservableMap; import javafx.collections.ObservableSet;


/** /**
* *
* @author Emil Forslund * @author Emil Forslund
*/ */
public final class ProjectProperty extends AbstractParentProperty<Project, Child<Project>> implements Project, ChildHelper<Project, ProjectManager> { public final class ProjectProperty extends AbstractParentProperty<Project, Child<Project>> implements Project, ChildHelper<Project, ProjectManager> {


private final ObservableMap<String, Dbms> dbmsChildren; private final ObservableSet<Dbms> dbmsChildren;
private final ObservableMap<String, PluginData> pluginDataChildren; private final ObservableSet<PluginData> pluginDataChildren;
private final StringProperty packageName; private final StringProperty packageName;
private final StringProperty packageLocation; private final StringProperty packageLocation;


Expand All @@ -55,8 +56,8 @@ public final class ProjectProperty extends AbstractParentProperty<Project, Child


public ProjectProperty(Speedment speedment) { public ProjectProperty(Speedment speedment) {
super(speedment); super(speedment);
dbmsChildren = observableMap(new ConcurrentSkipListMap<>()); dbmsChildren = observableSet(newSetFromMap(new ConcurrentSkipListMap<>()));
pluginDataChildren = observableMap(new ConcurrentSkipListMap<>()); pluginDataChildren = observableSet(newSetFromMap(new ConcurrentSkipListMap<>()));
packageName = new SimpleStringProperty(); packageName = new SimpleStringProperty();
packageLocation = new SimpleStringProperty(); packageLocation = new SimpleStringProperty();
} }
Expand Down Expand Up @@ -192,19 +193,19 @@ public Optional<? extends Child<Project>> add(Child<Project> child) throws Illeg


public Optional<Dbms> addDbms(Dbms child) { public Optional<Dbms> addDbms(Dbms child) {
requireNonNull(child); requireNonNull(child);
return Optional.ofNullable(dbmsChildren.put(child.getName(), child)); return dbmsChildren.add(child) ? Optional.empty() : Optional.of(child);
} }


public Optional<PluginData> addPluginData(PluginData child) { public Optional<PluginData> addPluginData(PluginData child) {
requireNonNull(child); requireNonNull(child);
return Optional.ofNullable(pluginDataChildren.put(child.getName(), child)); return pluginDataChildren.add(child) ? Optional.empty() : Optional.of(child);
} }


@Override @Override
public Stream<? extends Child<Project>> stream() { public Stream<? extends Child<Project>> stream() {
return Stream.concat( return Stream.concat(
MapStream.of(dbmsChildren).values(), dbmsChildren.stream().sorted(comparing(Dbms::getName)),
MapStream.of(pluginDataChildren).values() pluginDataChildren.stream().sorted(comparing(PluginData::getName))
); );
} }


Expand All @@ -214,9 +215,9 @@ public <T extends Child<Project>> Stream<T> streamOf(Class<T> childType) {
requireNonNull(childType); requireNonNull(childType);


if (Dbms.class.isAssignableFrom(childType)) { if (Dbms.class.isAssignableFrom(childType)) {
return (Stream<T>) dbmsChildren.values().stream(); return (Stream<T>) dbmsChildren.stream();
} else if (PluginData.class.isAssignableFrom(childType)) { } else if (PluginData.class.isAssignableFrom(childType)) {
return (Stream<T>) pluginDataChildren.values().stream(); return (Stream<T>) pluginDataChildren.stream();
} else { } else {
throw wrongChildTypeException(childType); throw wrongChildTypeException(childType);
} }
Expand Down Expand Up @@ -245,19 +246,14 @@ public <T extends Child<Project>> T find(Class<T> childType, String name) throws
requireNonNull(childType); requireNonNull(childType);
requireNonNull(name); requireNonNull(name);


final T node;
if (Dbms.class.isAssignableFrom(childType)) { if (Dbms.class.isAssignableFrom(childType)) {
node = (T) dbmsChildren.get(name); return (T) dbmsChildren.stream().filter(child -> name.equals(child.getName()))
.findAny().orElseThrow(() -> noChildWithNameException(childType, name));
} else if (PluginData.class.isAssignableFrom(childType)) { } else if (PluginData.class.isAssignableFrom(childType)) {
node = (T) pluginDataChildren.get(name); return (T) pluginDataChildren.stream().filter(child -> name.equals(child.getName()))
.findAny().orElseThrow(() -> noChildWithNameException(childType, name));
} else { } else {
throw wrongChildTypeException(childType); throw wrongChildTypeException(childType);
} }

if (node != null) {
return node;
} else {
throw noChildWithNameException(childType, name);
}
} }
} }

0 comments on commit c0f1e6f

Please sign in to comment.