io.ebeanservice.docstore.api.support.DocStructure Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ebean Show documentation
Show all versions of ebean Show documentation
composite of common runtime dependencies for all platforms
package io.ebeanservice.docstore.api.support;
import io.ebean.FetchPath;
import io.ebean.text.PathProperties;
import io.ebeaninternal.server.deploy.BeanDescriptor;
import io.ebeaninternal.server.deploy.BeanPropertyAssoc;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* Document structure for mapping to document store.
*/
public class DocStructure {
/**
* The full document structure.
*/
private final PathProperties doc;
/**
* The embedded document structures by path.
*/
private final Map embedded = new HashMap<>();
private final Map manyRoot = new HashMap<>();
/**
* Create given an initial deployment doc mapping.
*/
public DocStructure(PathProperties pathProps) {
this.doc = pathProps;
}
/**
* Add a property at the root level.
*/
public void addProperty(String name) {
doc.addToPath(null, name);
}
/**
* Add an embedded property with it's document structure.
*/
public void addNested(String path, PathProperties embeddedDoc) {
doc.addNested(path, embeddedDoc);
embedded.put(path, embeddedDoc);
}
/**
* Return the document structure.
*/
public PathProperties doc() {
return doc;
}
/**
* Return the document structure for an embedded path.
*/
public FetchPath getEmbedded(String path) {
return embedded.get(path);
}
public FetchPath getEmbeddedManyRoot(String path) {
return manyRoot.get(path);
}
/**
* For 'many' nested properties we need an additional root based graph to fetch and update.
*/
public void prepareMany(BeanDescriptor desc) {
Set strings = embedded.keySet();
for (String prop : strings) {
BeanPropertyAssoc> embProp = (BeanPropertyAssoc>) desc.findBeanProperty(prop);
if (embProp.isMany()) {
prepare(prop, embProp);
}
}
}
/**
* Add a PathProperties for an embedded 'many' property (at the root level).
*/
private void prepare(String prop, BeanPropertyAssoc> embProp) {
BeanDescriptor> targetDesc = embProp.getTargetDescriptor();
PathProperties manyRootPath = new PathProperties();
manyRootPath.addToPath(null, targetDesc.getIdProperty().getName());
manyRootPath.addNested(prop, embedded.get(prop));
manyRoot.put(prop, manyRootPath);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy