Skip to content

Commit

Permalink
Added listeners to Manager
Browse files Browse the repository at this point in the history
  • Loading branch information
minborg committed Jun 2, 2015
1 parent 0694698 commit 31c6bc8
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 14 deletions.
35 changes: 24 additions & 11 deletions src/main/java/com/speedment/core/core/manager/AbstractManager.java
Expand Up @@ -18,17 +18,18 @@


import com.speedment.core.config.model.Column; import com.speedment.core.config.model.Column;
import com.speedment.core.config.model.ForeignKey; import com.speedment.core.config.model.ForeignKey;
import com.speedment.core.config.model.ForeignKeyColumn;
import com.speedment.core.config.model.Table; import com.speedment.core.config.model.Table;
import com.speedment.core.core.Buildable; import com.speedment.core.core.Buildable;
import com.speedment.core.platform.Platform; import com.speedment.core.platform.Platform;
import com.speedment.core.platform.component.ManagerComponent; import com.speedment.core.platform.component.ManagerComponent;
import com.speedment.util.java.JavaLanguage;
import com.speedment.util.json.Json; import com.speedment.util.json.Json;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.function.Consumer;
import java.util.stream.Collectors; import java.util.stream.Collectors;


/** /**
Expand All @@ -42,27 +43,39 @@
public abstract class AbstractManager<PK, ENTITY, BUILDER extends Buildable<ENTITY>> implements Manager<PK, ENTITY, BUILDER> { public abstract class AbstractManager<PK, ENTITY, BUILDER extends Buildable<ENTITY>> implements Manager<PK, ENTITY, BUILDER> {


private final Map<List<Column>, IndexHolder<Object, PK, ENTITY>> indexes; private final Map<List<Column>, IndexHolder<Object, PK, ENTITY>> indexes;
final Set<Consumer<ENTITY>> insertListeners, updateListeners, deleteListeners;


public AbstractManager() { public AbstractManager() {
indexes = new ConcurrentHashMap<>(); indexes = new ConcurrentHashMap<>();
insertListeners = new CopyOnWriteArraySet<>();
updateListeners = new CopyOnWriteArraySet<>();
deleteListeners = new CopyOnWriteArraySet<>();
} }


@Override protected void insertEvent(ENTITY entity) {
public void onInsert(ENTITY entity) { insertToIndexes(entity);
insertListeners.stream().forEachOrdered(c -> c.accept(entity));
}

private void insertToIndexes(ENTITY entity) {
indexes.entrySet().stream().forEach(e -> { indexes.entrySet().stream().forEach(e -> {
e.getValue().put(makeKey(e.getKey(), entity), entity); e.getValue().put(makeKey(e.getKey(), entity), entity);
}); });
} }


@Override protected void updateEvent(ENTITY entity) {
public void onUpdate(ENTITY entity) {
//TODO Make atomic. //TODO Make atomic.
onDelete(entity); deleteFromIndexes(entity);
onInsert(entity); insertToIndexes(entity);
updateListeners.stream().forEachOrdered(c -> c.accept(entity));
} }


@Override protected void deleteEvent(ENTITY entity) {
public void onDelete(ENTITY entity) { deleteFromIndexes(entity);
deleteListeners.stream().forEachOrdered(c -> c.accept(entity));
}

private void deleteFromIndexes(ENTITY entity) {
indexes.entrySet().stream().forEach(e -> { indexes.entrySet().stream().forEach(e -> {
e.getValue().remove(makeKey(e.getKey(), entity)); e.getValue().remove(makeKey(e.getKey(), entity));
}); });
Expand Down Expand Up @@ -100,7 +113,7 @@ public Optional<Object> find(ENTITY entity, Column column) {
@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public String toJson(ENTITY entity) { public String toJson(ENTITY entity) {
return Json.allFrom(this).build(entity); return Json.allFrom(this).build(entity);
// return "{ " + getTable().streamOf(Column.class).map(c -> { // return "{ " + getTable().streamOf(Column.class).map(c -> {
// final StringBuilder sb = new StringBuilder(); // final StringBuilder sb = new StringBuilder();
// sb.append("\"").append(JavaLanguage.javaVariableName(c.getName())).append("\" : "); // sb.append("\"").append(JavaLanguage.javaVariableName(c.getName())).append("\" : ");
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/com/speedment/core/core/manager/Manager.java
Expand Up @@ -89,11 +89,11 @@ default long size() {
} }


// Add and remove // Add and remove
void onInsert(ENTITY entity); void onInsert(Consumer<ENTITY> listener);


void onUpdate(ENTITY entity); void onUpdate(Consumer<ENTITY> listener);


void onDelete(ENTITY primaryKey); void onDelete(Consumer<ENTITY> listener);


// Persistence // Persistence
Optional<ENTITY> persist(ENTITY entity); Optional<ENTITY> persist(ENTITY entity);
Expand Down

0 comments on commit 31c6bc8

Please sign in to comment.