Skip to content

Commit

Permalink
Begin indexation (non working)
Browse files Browse the repository at this point in the history
  • Loading branch information
fducroquet committed Mar 9, 2017
1 parent f6c46a1 commit 697e28c
Show file tree
Hide file tree
Showing 8 changed files with 253 additions and 98 deletions.
31 changes: 31 additions & 0 deletions gs-api/src/main/java/org/genericsystem/api/core/Filters.java
@@ -0,0 +1,31 @@
package org.genericsystem.api.core;

import java.util.function.Function;

public enum Filters {

INSTANCES(vertex -> (x -> vertex.equals(x.getMeta()))), INHERITINGS(vertex -> (x -> x.getSupers().contains(vertex))), COMPOSITES(vertex -> (x -> x.getComponents().contains(vertex)));

private Function<IGeneric<?>, IndexFilter> getFilter;

Filters(Function<IGeneric<?>, IndexFilter> getFilter) {
this.getFilter = getFilter;
}

public <T extends IGeneric<T>> IndexFilter getFilter(T generic) {
return getFilter.apply(generic);
}

public static interface IndexFilter<T extends IGeneric<T>> {
boolean test(T generic);
}

public static NoFilter<?> NO_FILTER = new NoFilter<>();

public static class NoFilter<T extends IGeneric<T>> implements IndexFilter<T> {
@Override
public boolean test(T generic) {
return true;
}
}
}
16 changes: 16 additions & 0 deletions gs-api/src/main/java/org/genericsystem/api/core/Snapshot.java
Expand Up @@ -133,6 +133,22 @@ public T get(Object o) {
};
}

default <U extends IGeneric<U>> Snapshot<T> filter(Filters filter, U generic) {
return new Snapshot<T>() {

@Override
public Stream<T> stream() {
return Snapshot.this.stream().filter(g -> filter.getFilter(generic).test((U) g));
}

@Override
public T get(Object o) {
T result = Snapshot.this.get(o);
return result != null && filter.getFilter(generic).test((U) result) ? result : null;
}
};
}

default List<T> toList() {
return stream().collect(Collectors.toList());
}
Expand Down
Expand Up @@ -2,16 +2,16 @@

import java.util.stream.Stream;

import javafx.beans.Observable;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;

import org.genericsystem.api.core.Snapshot;
import org.genericsystem.api.core.exceptions.ConcurrencyControlException;
import org.genericsystem.api.core.exceptions.OptimisticLockConstraintViolationException;
import org.genericsystem.api.core.exceptions.RollbackException;
import org.genericsystem.defaults.tools.BindingsTools;

import javafx.beans.Observable;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;

/**
* @author Nicolas Feybesse
*
Expand Down
Expand Up @@ -2,6 +2,7 @@

import java.util.stream.Stream;

import org.genericsystem.api.core.Filters;
import org.genericsystem.api.core.Snapshot;

/**
Expand All @@ -14,6 +15,8 @@ public interface IDependencies<T> extends Snapshot<T> {
@Override
Stream<T> stream();

Snapshot<Generic> filter(Filters filter);

@Override
T get(Object generic);

Expand Down
Expand Up @@ -9,16 +9,17 @@
import java.util.Set;
import java.util.TreeSet;

import javafx.collections.ObservableList;

import org.genericsystem.api.core.ApiStatics;
import org.genericsystem.api.core.Filters;
import org.genericsystem.api.core.IContext;
import org.genericsystem.api.core.Snapshot;
import org.genericsystem.api.core.exceptions.ReferentialIntegrityConstraintViolationException;
import org.genericsystem.api.core.exceptions.RollbackException;
import org.genericsystem.api.core.exceptions.UnreachableOverridesException;
import org.genericsystem.defaults.tools.SupersComputer;

import javafx.collections.ObservableList;

/**
* @author Nicolas Feybesse
*
Expand All @@ -32,37 +33,43 @@ default boolean isAlive(T vertex) {
assert vertex != null;
class AliveFinder {
T find(T vertex) {
if (vertex.isRoot())
if (vertex.isRoot()) {
System.out.println("isAlive, isRoot " + vertex);
return vertex;
}
if (vertex.isMeta()) {
T aliveSuper = new AliveFinder().find(vertex.getSupers().get(0));
System.out.println("isAlive, isMeta " + vertex.info() + ", aliveSuper : " + aliveSuper.info() + ", résultat : " + (aliveSuper != null ? getInheritings(aliveSuper).get(vertex) : null));
return aliveSuper != null ? getInheritings(aliveSuper).get(vertex) : null;
}
T aliveMeta = new AliveFinder().find(vertex.getMeta());
System.out.println("aliveMeta : " + aliveMeta + ", getInstances(aliveMeta).get(vertex) : " + getInstances(aliveMeta).get(vertex) + ", vertex : " + vertex);
return aliveMeta != null ? getInstances(aliveMeta).get(vertex) : null;
}
}
return /* vertex != null && */vertex.equals(new AliveFinder().find(vertex));
boolean result = vertex.equals(new AliveFinder().find(vertex));
System.out.println("isAlive ? " + result);
return /* vertex != null && */result;
}

default Snapshot<T> getInstances(T vertex) {
return getDependencies(vertex).filter(x -> vertex.equals(x.getMeta()));
return getDependencies(vertex).filter(Filters.INSTANCES, vertex);
}

default ObservableList<T> getObservableInstances(T vertex) {
return getObservableDependencies(vertex).filtered(x -> vertex.equals(x.getMeta()));
}

default Snapshot<T> getInheritings(T vertex) {
return getDependencies(vertex).filter(x -> x.getSupers().contains(vertex));
return getDependencies(vertex).filter(Filters.INHERITINGS, vertex);
}

default ObservableList<T> getObservableInheritings(T vertex) {
return getObservableDependencies(vertex).filtered(x -> x.getSupers().contains(vertex));
}

default Snapshot<T> getComposites(T vertex) {
return getDependencies(vertex).filter(x -> x.getComponents().contains(vertex));
return getDependencies(vertex).filter(Filters.COMPOSITES, vertex);
}

default ObservableList<T> getObservableComposites(T vertex) {
Expand Down Expand Up @@ -114,21 +121,17 @@ class OrderedRemoveDependencies extends TreeSet<T> {
OrderedRemoveDependencies visit(T node) {
if (!contains(node)) {
if (!getInheritings(node).isEmpty())
discardWithException(new ReferentialIntegrityConstraintViolationException("Ancestor : " + node + " has a inheriting dependencies : "
+ getInheritings(node).info()));
discardWithException(new ReferentialIntegrityConstraintViolationException("Ancestor : " + node + " has a inheriting dependencies : " + getInheritings(node).info()));
getInheritings(node).forEach(this::visit);

if (!getInstances(node).isEmpty())
discardWithException(new ReferentialIntegrityConstraintViolationException("Ancestor : " + node + " has a instance dependencies : "
+ getInstances(node).info()));
discardWithException(new ReferentialIntegrityConstraintViolationException("Ancestor : " + node + " has a instance dependencies : " + getInstances(node).info()));
getInstances(node).forEach(this::visit);

for (T composite : getComposites(node)) {
for (int componentPos = 0; componentPos < composite.getComponents().size(); componentPos++)
if (composite.getComponents().get(componentPos).equals(node) && !contains(composite)
&& composite.getMeta().isReferentialIntegrityEnabled(componentPos))
discardWithException(new ReferentialIntegrityConstraintViolationException(composite + " is Referential Integrity for ancestor "
+ node + " by composite position : " + componentPos));
if (composite.getComponents().get(componentPos).equals(node) && !contains(composite) && composite.getMeta().isReferentialIntegrityEnabled(componentPos))
discardWithException(new ReferentialIntegrityConstraintViolationException(composite + " is Referential Integrity for ancestor " + node + " by composite position : " + componentPos));
visit(composite);
}
add(node);
Expand Down

0 comments on commit 697e28c

Please sign in to comment.