All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
ai.stapi.graphoperations.graphDeserializers.ogmDeserializer.specific.ObjectGraphToObjectDeserializer Maven / Gradle / Ivy
package ai.stapi.graphoperations.graphDeserializers.ogmDeserializer.specific;
import ai.stapi.graph.inMemoryGraph.InMemoryGraphRepository;
import ai.stapi.graph.traversableGraphElements.TraversableGraphElement;
import ai.stapi.graphoperations.graphDeserializers.ogmDeserializer.GenericGraphToObjectDeserializer;
import ai.stapi.graphoperations.graphDeserializers.ogmDeserializer.MissingTraversalTargetResolvingStrategy;
import ai.stapi.graphoperations.graphDeserializers.ogmDeserializer.exception.GenericGraphOgmDeserializerException;
import ai.stapi.graphoperations.graphDeserializers.ogmDeserializer.specific.exception.SpecificGraphOgmDeserializerException;
import ai.stapi.graphoperations.graphLanguage.graphDescription.GraphDescription;
import ai.stapi.graphoperations.graphReader.GraphReader;
import ai.stapi.graphoperations.graphReader.mappingPartReadResolvers.exception.GraphDescriptionReadResolverException;
import ai.stapi.graphoperations.objectGraphLanguage.ObjectGraphMapping;
import ai.stapi.graphoperations.objectGraphLanguage.ObjectObjectGraphMapping;
import ai.stapi.graphoperations.ogmProviders.GenericGraphMappingProvider;
import ai.stapi.graphoperations.serializationTypeProvider.GenericSerializationTypeByNodeProvider;
import java.util.HashMap;
import java.util.List;
public class ObjectGraphToObjectDeserializer extends AbstractSpecificGraphToObjectDeserializer {
public ObjectGraphToObjectDeserializer(
GraphReader graphReader,
GenericGraphToObjectDeserializer genericDeserializer,
GenericSerializationTypeByNodeProvider serializationTypeProvider,
GenericGraphMappingProvider mappingProvider
) {
super(graphReader, genericDeserializer, serializationTypeProvider, mappingProvider);
}
@Override
public Object deserialize(
List elements,
GraphDescription lastGraphDescription,
ObjectGraphMapping graphMapping,
InMemoryGraphRepository contextualGraph,
MissingTraversalTargetResolvingStrategy missingTraversalTargetResolvingStrategy
) {
if (elements.size() == 0) {
return null;
}
if (elements.size() > 1) {
throw SpecificGraphOgmDeserializerException.becauseThereIsMultipleGraphBranches(
graphMapping,
elements
);
}
elements = this.ensureElementsAreNodes(elements, lastGraphDescription);
var objectGraphMapping = (ObjectObjectGraphMapping) graphMapping;
var map = new HashMap();
var traversedObject = this.traverseSingleGraphBranch(
elements.get(0).getId(),
elements.get(0).getType(),
graphMapping.getGraphDescription(),
contextualGraph
);
objectGraphMapping.getFields().forEach(
(fieldName, fieldDefinition) -> {
var traversedField = this.traverseMultipleGraphBranch(
traversedObject.getId(),
traversedObject.getType(),
fieldDefinition.getRelation(),
contextualGraph
);
if (
missingTraversalTargetResolvingStrategy.equals(
MissingTraversalTargetResolvingStrategy.LENIENT
)
) {
try {
var object = this.genericDeserializer.resolveInternally(
traversedField,
this.updateLastGraphDescription(
lastGraphDescription,
(GraphDescription) fieldDefinition.getRelation()
),
fieldDefinition.getFieldObjectGraphMapping(),
contextualGraph,
missingTraversalTargetResolvingStrategy
);
map.put(fieldName, object);
} catch (GraphDescriptionReadResolverException |
GenericGraphOgmDeserializerException exception) {
map.put(fieldName, null);
}
} else {
var object = this.genericDeserializer.resolveInternally(
traversedField,
this.updateLastGraphDescription(
lastGraphDescription,
(GraphDescription) fieldDefinition.getRelation()
),
fieldDefinition.getFieldObjectGraphMapping(),
contextualGraph,
missingTraversalTargetResolvingStrategy
);
map.put(fieldName, object);
}
}
);
return map;
}
@Override
public boolean supports(
ObjectGraphMapping objectGraphMapping,
List elements
) {
return objectGraphMapping instanceof ObjectObjectGraphMapping;
}
}