use of org.summerb.easycrud.api.dto.datapackage.DataSet in project summerb by skarpushin.
the class DataSetLoaderTest method testResolveReferencedObjects_ExpectOneToManyTwoParentsOneChildLoadedOk.
@Test
public void testResolveReferencedObjects_ExpectOneToManyTwoParentsOneChildLoadedOk() throws EntityNotFoundException, NotAuthorizedException, FieldValidationException {
DataSetLoader loader = buildLoaderCase1();
TestDto2 d2i1 = new TestDto2();
d2i1.setEnv("required");
d2i1.setLinkToFullDonwload("required");
d2i1 = testDto2Service.create(d2i1);
TestDto1 d1i1 = new TestDto1();
d1i1.setEnv("required");
d1i1.setLinkToFullDonwload("required");
d1i1 = testDto1Service.create(d1i1);
TestDto3 d3i1 = new TestDto3();
d3i1.setLinkToDtoTwo(d2i1.getId());
d3i1 = testDto3Service.create(d3i1);
TestDto3 d3i2 = new TestDto3();
d3i2.setLinkToDtoTwo(d2i1.getId());
d3i2.setLinkToDtoOneOptional(d1i1.getId());
d3i2 = testDto3Service.create(d3i2);
DataSet result = new DataSet();
result.get(testDto2Service.getEntityTypeMessageCode()).put(d2i1);
result.get(testDto1Service.getEntityTypeMessageCode()).put(d1i1);
loader.resolveReferencedObjects(result, Refs.ref3to2mand.reverse(), Refs.ref3to1.reverse());
assertNotNull(result.get(testDto3Service.getEntityTypeMessageCode()).find(d3i1.getId()));
assertNotNull(result.get(testDto3Service.getEntityTypeMessageCode()).find(d3i2.getId()));
}
use of org.summerb.easycrud.api.dto.datapackage.DataSet in project summerb by skarpushin.
the class DataSetLoaderTest method testLoadObjectsByIds_ExpectCoupleOneLevelObjectsLoadedOK.
@Test
public void testLoadObjectsByIds_ExpectCoupleOneLevelObjectsLoadedOK() throws EntityNotFoundException, NotAuthorizedException, FieldValidationException {
DataSetLoader loader = buildLoaderCase1();
TestDto2 d2i1 = new TestDto2();
d2i1.setEnv("d2i1");
d2i1.setLinkToFullDonwload("asdad");
d2i1 = testDto2Service.create(d2i1);
TestDto3 d3i1 = new TestDto3();
d3i1.setLinkToDtoTwo(d2i1.getId());
d3i1.setLinkToDtoTwo(0);
d3i1 = testDto3Service.create(d3i1);
DataSet result = new DataSet();
Map<String, Set<Object>> idsToLoad = new HashMap<String, Set<Object>>();
idsToLoad.put(testDto2Service.getEntityTypeMessageCode(), ids(d2i1.getId()));
idsToLoad.put(testDto3Service.getEntityTypeMessageCode(), ids(d3i1.getId()));
loader.loadObjectsByIds(idsToLoad, result);
assertNotNull(result.get(testDto2Service.getEntityTypeMessageCode()).find(d2i1.getId()));
assertNotNull(result.get(testDto3Service.getEntityTypeMessageCode()).find(d3i1.getId()));
}
use of org.summerb.easycrud.api.dto.datapackage.DataSet in project summerb by skarpushin.
the class DataSetLoaderImpl method resolveReferencedObjects.
@Override
public void resolveReferencedObjects(DataSet dataSet, Ref... references) throws EntityNotFoundException, NotAuthorizedException {
Preconditions.checkArgument(dataSet != null);
Preconditions.checkArgument(references != null);
DataSet nextDataSet = dataSet;
while (nextDataSet != null) {
DataSet curDataSet = nextDataSet;
nextDataSet = null;
DataSet newDataSet = new DataSet();
Map<String, Set<Object>> idsToLoad = enumerateOutgoingReferences(curDataSet, dataSet, references);
if (!idsToLoad.isEmpty()) {
EntityTypeToObjectsMap loadObjects = loadObjectsByIds(idsToLoad);
addAllObjects(loadObjects, dataSet);
addAllObjects(loadObjects, newDataSet);
}
// Handle one2many
Map<Ref, Set<Object>> oneToManyReferencesToLoad = enumerateOneToManyReferences(curDataSet, references);
if (!oneToManyReferencesToLoad.isEmpty()) {
EntityTypeToObjectsMap loadedOneToManyRefs = loadOneToManyReferences(oneToManyReferencesToLoad);
addAllObjects(loadedOneToManyRefs, dataSet);
addAllObjects(loadedOneToManyRefs, newDataSet);
populateBackReferencesOne2Many(loadedOneToManyRefs, oneToManyReferencesToLoad, dataSet);
}
// Handle many2many
Map<Ref, Set<Object>> manyToManyRefToReferencersIds = enumerateManyToManyReferences(curDataSet, references);
if (!manyToManyRefToReferencersIds.isEmpty()) {
ManyToManyRefToReferenceesMap loadedManyToManyRefs = loadManyToManyReferences(manyToManyRefToReferencersIds);
addAllObjects(loadedManyToManyRefs, dataSet);
addAllObjects(loadedManyToManyRefs, newDataSet);
populateBackReferencesMany2Many(loadedManyToManyRefs, dataSet);
}
// next iteration
if (!newDataSet.isEmpty()) {
nextDataSet = newDataSet;
}
}
}
use of org.summerb.easycrud.api.dto.datapackage.DataSet in project summerb by skarpushin.
the class EasyCrudRestControllerBase method resolveReferences.
protected void resolveReferences(List<String> referencesToResolve, CrudQueryResult<TId, TDto> ret, List<TDto> items) throws EntityNotFoundException, NotAuthorizedException {
Preconditions.checkState(dataSetLoader != null, "DataSetLoader is required to resolve references");
Preconditions.checkState(referencesRegistry != null, "referencesRegistry is required to resolve references");
DataSet ds = new DataSet();
DataTable<TId, TDto> table = new DataTable<>(service.getEntityTypeMessageCode());
table.putAll(items);
ds.getTables().put(table.getName(), table);
List<Ref> references = referencesToResolve.stream().map(name -> referencesRegistry.getRefByName(name)).collect(Collectors.toList());
Ref[] refsArr = (Ref[]) references.toArray(new Ref[references.size()]);
dataSetLoader.resolveReferencedObjects(ds, refsArr);
// now remove initial table from dataset because we don't want to
// duplicate this. It's already populated to rows
ds.getTables().remove(table.getName());
// x. ret
ret.setRefsResolved(references.stream().collect(Collectors.toMap(Ref::getName, Function.identity())));
ret.setRefs(ds);
}
use of org.summerb.easycrud.api.dto.datapackage.DataSet in project summerb by skarpushin.
the class DataSetLoaderTest method testResolveReferencedObjects_ExpectDirectReferencesLoadedOk.
@Test
public void testResolveReferencedObjects_ExpectDirectReferencesLoadedOk() throws EntityNotFoundException, NotAuthorizedException, FieldValidationException {
DataSetLoader loader = buildLoaderCase1();
TestDto1 d1i1 = new TestDto1();
d1i1.setEnv("d1i1");
d1i1.setLinkToFullDonwload("required");
d1i1 = testDto1Service.create(d1i1);
TestDto2 d2i1 = new TestDto2();
d2i1.setEnv(d1i1.getId());
d2i1.setLinkToFullDonwload("required");
d2i1 = testDto2Service.create(d2i1);
TestDto3 d3i1 = new TestDto3();
d3i1.setLinkToDtoTwo(d2i1.getId());
d3i1 = testDto3Service.create(d3i1);
DataSet result = new DataSet();
Map<String, Set<Object>> idsToLoad = new HashMap<String, Set<Object>>();
idsToLoad.put(testDto3Service.getEntityTypeMessageCode(), ids(d3i1.getId()));
loader.loadObjectsByIds(idsToLoad, result);
loader.resolveReferencedObjects(result, Refs.ref3to2mand, Refs.ref2to1);
assertNotNull(result.get(testDto2Service.getEntityTypeMessageCode()).find(d2i1.getId()));
assertNotNull(result.get(testDto1Service.getEntityTypeMessageCode()).find(d1i1.getId()));
}
Aggregations