ソースを参照

pass cascade flag from fk to reference, respect cascade flag in deleteDependencies

tags/2.0.1
Jonathan Cobb 4年前
コミット
7937eb3f39
3個のファイルの変更14行の追加4行の削除
  1. +7
    -1
      wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/EntityFieldReference.java
  2. +1
    -1
      wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/EntityReferences.java
  3. +6
    -2
      wizard-server/src/main/java/org/cobbzilla/wizard/server/config/PgRestServerConfiguration.java

+ 7
- 1
wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/EntityFieldReference.java ファイルの表示

@@ -2,6 +2,7 @@ package org.cobbzilla.wizard.model.entityconfig;

import lombok.*;

import static org.cobbzilla.util.daemon.ZillaRuntime.bool;
import static org.cobbzilla.util.daemon.ZillaRuntime.empty;

/**
@@ -11,9 +12,10 @@ import static org.cobbzilla.util.daemon.ZillaRuntime.empty;
@NoArgsConstructor @EqualsAndHashCode(of={"entity", "field"}) @ToString(of={"entity", "field"})
public class EntityFieldReference {

public EntityFieldReference (String entity, String field) {
public EntityFieldReference (String entity, String field, Boolean cascade) {
this.entity = entity;
this.field = field;
this.cascade = cascade;
}

/** A special value that can be used by child entities to indicate that the lexically enclosing entity is their parent. */
@@ -36,4 +38,8 @@ public class EntityFieldReference {
*/
@Getter @Setter private String finder;

/** Should a deletion of an entity cascade to the entity referenced? */
@Getter @Setter private Boolean cascade;
public boolean cascade() { return bool(cascade); }

}

+ 1
- 1
wizard-common/src/main/java/org/cobbzilla/wizard/model/entityconfig/EntityReferences.java ファイルの表示

@@ -85,7 +85,7 @@ public class EntityReferences {
Arrays.stream(dependencyOrParent.getDeclaredFields())
.filter(FIELD_HAS_FK)
.filter(f -> f.getAnnotation(ECForeignKey.class).entity().equals(entityClass))
.forEach(f -> refs.add(new EntityFieldReference(dependency.getName(), f.getName())));
.forEach(f -> refs.add(new EntityFieldReference(dependency.getName(), f.getName(), f.getAnnotation(ECForeignKey.class).cascade())));
refs.addAll(getDependencyRefs(entityClass, dependency, dependencyOrParent.getSuperclass(), refs));
return refs;
}


+ 6
- 2
wizard-server/src/main/java/org/cobbzilla/wizard/server/config/PgRestServerConfiguration.java ファイルの表示

@@ -347,12 +347,12 @@ public class PgRestServerConfiguration extends RestServerConfiguration implement
return reversed;
}

private Map<Class<? extends Identifiable>, List<Class<? extends Identifiable>>> dependencyCache = new ConcurrentHashMap<>();
private final Map<Class<? extends Identifiable>, List<Class<? extends Identifiable>>> dependencyCache = new ConcurrentHashMap<>();
public List<Class<? extends Identifiable>> getDependencies (Class<? extends Identifiable> entityClass) {
return dependencyCache.computeIfAbsent(entityClass, c -> getDependentEntities(entityClass, getEntityClassesReverse()));
}

private Map<Class<? extends Identifiable>, Collection<EntityFieldReference>> dependencyDAOCache = new ConcurrentHashMap<>();
private final Map<Class<? extends Identifiable>, Collection<EntityFieldReference>> dependencyDAOCache = new ConcurrentHashMap<>();
public Collection<EntityFieldReference> dependencyRefs(Class<? extends Identifiable> entityClass) {
return dependencyDAOCache.computeIfAbsent(entityClass, c -> getDependencyRefs(c, getDependencies(c)));
}
@@ -364,6 +364,10 @@ public class PgRestServerConfiguration extends RestServerConfiguration implement
final Collection<String> excludeDepFields) {
dependencyRefs(thing.getClass()).forEach(
dep -> {
if (!dep.cascade()) {
log.debug("deleteDependencies("+thing+"): excluding due to cascade=false: "+dep);
return;
}
if (excludeDepClasses != null && excludeDepClasses.stream().anyMatch(depClass -> depClass.getName().equals(dep.getEntity()))) {
log.debug("deleteDependencies("+thing+"): excluding by dep class: "+dep);
return;


読み込み中…
キャンセル
保存