Skip to content

Commit

Permalink
Change from map to set in PluginDataProperty
Browse files Browse the repository at this point in the history
  • Loading branch information
Emil Forslund committed Nov 23, 2015
1 parent 844cd1e commit 3dcbd87
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 25 deletions.
Expand Up @@ -102,6 +102,7 @@ public <T extends Child<PluginData>> T find(Class<T> childClass, String name) th
} }


@Override @Override
@SuppressWarnings("unchecked")
public Optional<Child<PluginData>> add(Child<PluginData> child) { public Optional<Child<PluginData>> add(Child<PluginData> child) {
final ChildHolder<Child<PluginData>> holder = children.computeIfAbsent( final ChildHolder<Child<PluginData>> holder = children.computeIfAbsent(
child.getInterfaceMainClass(), child.getInterfaceMainClass(),
Expand Down
Expand Up @@ -17,49 +17,50 @@
package com.speedment.internal.gui.config; package com.speedment.internal.gui.config;


import com.speedment.Speedment; import com.speedment.Speedment;
import com.speedment.config.Node;
import com.speedment.config.PluginData; import com.speedment.config.PluginData;
import com.speedment.config.Project; import com.speedment.config.Project;
import com.speedment.config.aspects.Child; import com.speedment.config.aspects.Child;
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 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.collections.ObservableMap;


import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;
import static javafx.collections.FXCollections.observableMap; import java.util.concurrent.ConcurrentHashMap;
import static java.util.stream.Collectors.toCollection;
import static javafx.collections.FXCollections.observableSet;
import javafx.collections.ObservableSet;


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


private final ObservableMap<String, Child<PluginData>> children; private final ObservableSet<Child<PluginData>> children;


private Project parent; private Project parent;


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


public PluginDataProperty(Speedment speedment, PluginData prototype) { public PluginDataProperty(Speedment speedment, PluginData prototype) {
super(speedment, prototype); super(speedment, prototype);
children = observableMap(MapStream children = observableSet(
.fromValues(prototype.stream() prototype.stream()
.map(child -> { .map(child -> {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
final Child<PluginData> newChild = (Child<PluginData>) child; final Child<PluginData> newChild = (Child<PluginData>) child;
newChild.setParent(this); newChild.setParent(this);
return newChild; return newChild;
}) })
, Node::getName).toConcurrentNavigableMap() .collect(toCollection(() -> newSetFromMap(new ConcurrentHashMap<>())))
); );
} }


Expand Down Expand Up @@ -92,21 +93,20 @@ public Child<PluginData> metadata(Closure<?> c) {
)) ))
.newChildToPluginData(c, this); .newChildToPluginData(c, this);


children.put(child.getName(), child); children.add(child);
return child; return child;
}); });
} }


@Override @Override
public Optional<? extends Child<PluginData>> add(Child<PluginData> child) { public Optional<? extends Child<PluginData>> add(Child<PluginData> child) {
return Optional.ofNullable( requireNonNull(child);
children.put(child.getName(), child) return children.add(child) ? Optional.empty() : Optional.of(child);
);
} }


@Override @Override
public Stream<? extends Child<PluginData>> stream() { public Stream<? extends Child<PluginData>> stream() {
return MapStream.of(children).values(); return children.stream();
} }


@Override @Override
Expand All @@ -128,22 +128,19 @@ public int countOf(Class<? extends Child<PluginData>> childType) {
} }


@Override @Override
@SuppressWarnings("unchecked")
public <T extends Child<PluginData>> T find(Class<T> childType, String name) throws SpeedmentException { public <T extends Child<PluginData>> T find(Class<T> childType, String name) throws SpeedmentException {
requireNonNull(childType); requireNonNull(childType);
requireNonNull(name); requireNonNull(name);


final Child<PluginData> child = children.get(name); final Child<PluginData> child = children.stream().filter(c -> name.equals(c.getName()))
if (child != null) { .findAny().orElseThrow(() -> noChildWithNameException(childType, name));
if (child.getInterfaceMainClass().isAssignableFrom(childType)) {
@SuppressWarnings("unchecked") if (child.getInterfaceMainClass().isAssignableFrom(childType)) {
final T node = (T) child; @SuppressWarnings("unchecked")
return node; final T node = (T) child;
} else { return node;
throw wrongChildTypeException(childType);
}
} else { } else {
throw noChildWithNameException(childType, name); throw wrongChildTypeException(childType);
} }
} }
} }

0 comments on commit 3dcbd87

Please sign in to comment.