Added management of delete propagation constraint
This commit is contained in:
parent
89f2dd84cb
commit
768dc47183
|
@ -2,12 +2,13 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
|||
|
||||
# Changelog for Resource Registry Service
|
||||
|
||||
## [v4.1.1-SNAPSHOT]
|
||||
## [v4.2.0-SNAPSHOT]
|
||||
|
||||
- Fixed bug on JSONQuery for Facets which does not have any properties to match [#24237]
|
||||
- Fixed bug on JSONQuery for IsRelatedTo relations indicating both source and target resources [#24264]
|
||||
- Fixed bug on returned boolean values as string [#24240]
|
||||
- Enabled array properties [#24225]
|
||||
- Using delete in propagation contraint as action indication for delete operation [#24224]
|
||||
|
||||
|
||||
## [v4.1.0]
|
||||
|
|
2
pom.xml
2
pom.xml
|
@ -10,7 +10,7 @@
|
|||
|
||||
<groupId>org.gcube.information-system</groupId>
|
||||
<artifactId>resource-registry</artifactId>
|
||||
<version>4.1.1-SNAPSHOT</version>
|
||||
<version>4.2.0-SNAPSHOT</version>
|
||||
<name>Resource Registry Service</name>
|
||||
<description>The Resource Registry is a web-service which represent the core component of the gCube Information System</description>
|
||||
<packaging>war</packaging>
|
||||
|
|
|
@ -193,6 +193,7 @@ public class DatabaseEnvironment {
|
|||
TypeSecurityContext.getInstance().create();
|
||||
ContextSecurityContext.getInstance().create();
|
||||
|
||||
/* We must create only OrientDB types */
|
||||
List<Class<? extends Element>> definitionToBeCreated = new ArrayList<>();
|
||||
definitionToBeCreated.add(PropertyElement.class);
|
||||
definitionToBeCreated.add(Property.class);
|
||||
|
@ -221,6 +222,15 @@ public class DatabaseEnvironment {
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* We have already created Property and Header
|
||||
* because Header is needed to create
|
||||
* types for internal use (i.e. Context, EntityType).
|
||||
*
|
||||
* For Property and Header we also need
|
||||
* to create the instance in TypeSecurityContext
|
||||
* as we will do for any other Property specialization.
|
||||
*/
|
||||
List<Class<? extends Element>> schemaToBeCreated = new ArrayList<>();
|
||||
schemaToBeCreated.add(Property.class);
|
||||
schemaToBeCreated.add(Header.class);
|
||||
|
@ -236,6 +246,8 @@ public class DatabaseEnvironment {
|
|||
Class<Type> typeClz = Type.class;
|
||||
packages.add(typeClz.getPackage());
|
||||
|
||||
|
||||
// Adding packages of AccessType
|
||||
AccessType[] accessTypes = AccessType.values();
|
||||
for(AccessType accessType : accessTypes) {
|
||||
Class<Element> clz = accessType.getTypeClass();
|
||||
|
|
|
@ -7,6 +7,7 @@ import org.gcube.informationsystem.model.impl.properties.PropagationConstraintIm
|
|||
import org.gcube.informationsystem.model.reference.entities.Facet;
|
||||
import org.gcube.informationsystem.model.reference.properties.PropagationConstraint;
|
||||
import org.gcube.informationsystem.model.reference.properties.PropagationConstraint.AddConstraint;
|
||||
import org.gcube.informationsystem.model.reference.properties.PropagationConstraint.DeleteConstraint;
|
||||
import org.gcube.informationsystem.model.reference.properties.PropagationConstraint.RemoveConstraint;
|
||||
import org.gcube.informationsystem.model.reference.relations.ConsistsOf;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException;
|
||||
|
@ -35,6 +36,7 @@ public class ConsistsOfManagement extends RelationManagement<FacetManagement, Fa
|
|||
|
||||
static {
|
||||
DEFAULT_CONSISTS_OF_PC = new PropagationConstraintImpl();
|
||||
DEFAULT_CONSISTS_OF_PC.setDeleteConstraint(DeleteConstraint.cascade);
|
||||
DEFAULT_CONSISTS_OF_PC.setRemoveConstraint(RemoveConstraint.cascade);
|
||||
DEFAULT_CONSISTS_OF_PC.setAddConstraint(AddConstraint.propagate);
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ import org.gcube.informationsystem.model.impl.properties.PropagationConstraintIm
|
|||
import org.gcube.informationsystem.model.reference.entities.Resource;
|
||||
import org.gcube.informationsystem.model.reference.properties.PropagationConstraint;
|
||||
import org.gcube.informationsystem.model.reference.properties.PropagationConstraint.AddConstraint;
|
||||
import org.gcube.informationsystem.model.reference.properties.PropagationConstraint.DeleteConstraint;
|
||||
import org.gcube.informationsystem.model.reference.properties.PropagationConstraint.RemoveConstraint;
|
||||
import org.gcube.informationsystem.model.reference.relations.Relation;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException;
|
||||
|
@ -31,6 +32,7 @@ public class IsRelatedToManagement extends RelationManagement<ResourceManagement
|
|||
|
||||
static {
|
||||
DEFAULT_IS_RELATED_TO_PC = new PropagationConstraintImpl();
|
||||
DEFAULT_IS_RELATED_TO_PC.setDeleteConstraint(DeleteConstraint.keep);
|
||||
DEFAULT_IS_RELATED_TO_PC.setRemoveConstraint(RemoveConstraint.keep);
|
||||
DEFAULT_IS_RELATED_TO_PC.setAddConstraint(AddConstraint.unpropagate);
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ import org.gcube.informationsystem.model.reference.entities.Entity;
|
|||
import org.gcube.informationsystem.model.reference.entities.Resource;
|
||||
import org.gcube.informationsystem.model.reference.properties.PropagationConstraint;
|
||||
import org.gcube.informationsystem.model.reference.properties.PropagationConstraint.AddConstraint;
|
||||
import org.gcube.informationsystem.model.reference.properties.PropagationConstraint.DeleteConstraint;
|
||||
import org.gcube.informationsystem.model.reference.properties.PropagationConstraint.RemoveConstraint;
|
||||
import org.gcube.informationsystem.model.reference.relations.ConsistsOf;
|
||||
import org.gcube.informationsystem.model.reference.relations.Relation;
|
||||
|
@ -282,6 +283,22 @@ public abstract class RelationManagement<T extends EntityManagement<? extends En
|
|||
}
|
||||
propagationConstraintOrient.setRemoveConstraint(removeConstraint);
|
||||
|
||||
DeleteConstraint deleteConstraint = propagationConstraint.getDeleteConstraint();
|
||||
if(deleteConstraint == null) {
|
||||
deleteConstraint = defaultPropagationConstraint.getDeleteConstraint();
|
||||
logger.debug("Unable to get {}. Default value ({}) will be used", DeleteConstraint.class.getSimpleName(),
|
||||
deleteConstraint);
|
||||
}else {
|
||||
if (this instanceof ConsistsOfManagement && deleteConstraint == DeleteConstraint.keep) {
|
||||
deleteConstraint = defaultPropagationConstraint.getDeleteConstraint();
|
||||
logger.warn("A {} cannot use {}.{}. Default value ({}) will be used", ConsistsOf.NAME,
|
||||
DeleteConstraint.class.getSimpleName(), DeleteConstraint.keep, deleteConstraint);
|
||||
|
||||
}
|
||||
}
|
||||
propagationConstraintOrient.setDeleteConstraint(deleteConstraint);
|
||||
|
||||
|
||||
return propagationConstraintOrient;
|
||||
}
|
||||
|
||||
|
@ -702,23 +719,32 @@ public abstract class RelationManagement<T extends EntityManagement<? extends En
|
|||
|
||||
getSourceEntityManagement().getElement();
|
||||
|
||||
RemoveConstraint removeConstraint = RemoveConstraint.keep;
|
||||
DeleteConstraint deleteConstraint = DeleteConstraint.keep;
|
||||
|
||||
try {
|
||||
PropagationConstraint propagationConstraint = Utility.getPropertyDocument(PropagationConstraint.class,
|
||||
element, Relation.PROPAGATION_CONSTRAINT_PROPERTY);
|
||||
if(propagationConstraint.getRemoveConstraint() != null) {
|
||||
removeConstraint = propagationConstraint.getRemoveConstraint();
|
||||
if(propagationConstraint.getDeleteConstraint() != null) {
|
||||
deleteConstraint = propagationConstraint.getDeleteConstraint();
|
||||
} else {
|
||||
String error = String.format("%s.%s in %s is null. %s", Relation.PROPAGATION_CONSTRAINT_PROPERTY,
|
||||
PropagationConstraint.REMOVE_PROPERTY, Utility.toJsonString(element, true),
|
||||
PropagationConstraint.DELETE_PROPERTY, Utility.toJsonString(element, true),
|
||||
Utility.SHOULD_NOT_OCCUR_ERROR_MESSAGE);
|
||||
logger.error(error);
|
||||
throw new ResourceRegistryException(error);
|
||||
|
||||
logger.warn(error);
|
||||
// logger.error(error);
|
||||
// TODO Added for backward compatibility
|
||||
deleteConstraint = DeleteConstraint.values()[propagationConstraint.getRemoveConstraint().ordinal()];
|
||||
/*
|
||||
* TODO Restore the exception raising and remove the line above
|
||||
*
|
||||
* throw new ResourceRegistryException(error);
|
||||
*/
|
||||
}
|
||||
|
||||
} catch(Exception e) {
|
||||
logger.warn("Error while getting {} from {}. Assuming {}. {}", Relation.PROPAGATION_CONSTRAINT_PROPERTY,
|
||||
Utility.toJsonString(element, true), removeConstraint, Utility.SHOULD_NOT_OCCUR_ERROR_MESSAGE);
|
||||
Utility.toJsonString(element, true), deleteConstraint, Utility.SHOULD_NOT_OCCUR_ERROR_MESSAGE);
|
||||
}
|
||||
|
||||
// pre-loading target entity because after deleting the relation we will not be able to get it
|
||||
|
@ -730,7 +756,7 @@ public abstract class RelationManagement<T extends EntityManagement<? extends En
|
|||
affectedInstances.put(uuid, serializeAsAffectedInstance());
|
||||
element.delete();
|
||||
|
||||
switch(removeConstraint) {
|
||||
switch(deleteConstraint) {
|
||||
case cascade:
|
||||
t.internalDelete();
|
||||
break;
|
||||
|
@ -741,7 +767,7 @@ public abstract class RelationManagement<T extends EntityManagement<? extends En
|
|||
Iterator<OEdge> iterator = iterable.iterator();
|
||||
if(iterator.hasNext()) {
|
||||
logger.trace("{} point to {} which is not orphan. Giving {} directive, it will be keep.", element,
|
||||
target, removeConstraint);
|
||||
target, deleteConstraint);
|
||||
} else {
|
||||
getTargetEntityManagement().internalDelete();
|
||||
}
|
||||
|
|
|
@ -19,6 +19,16 @@ public class PropagationConstraintOrient extends ODocument implements org.gcube.
|
|||
super(iClassName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DeleteConstraint getDeleteConstraint() {
|
||||
return DeleteConstraint.valueOf((String) this.field(PropagationConstraint.DELETE_PROPERTY));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDeleteConstraint(DeleteConstraint deleteConstraint) {
|
||||
this.field(PropagationConstraint.REMOVE_PROPERTY, deleteConstraint.name());
|
||||
}
|
||||
|
||||
@Override
|
||||
public RemoveConstraint getRemoveConstraint() {
|
||||
return RemoveConstraint.valueOf((String) this.field(PropagationConstraint.REMOVE_PROPERTY));
|
||||
|
|
Loading…
Reference in New Issue