use of io.lumeer.core.util.Tuple in project engine by Lumeer.
the class DocumentFacade method createDocument.
private Tuple<Document, Document> createDocument(Collection collection, Document document) {
DataDocument data = document.getData();
data = constraintManager.encodeDataTypes(collection, data);
Document storedDocument = createDocument(collection, document, new DataDocument(data));
DataDocument storedData = dataDao.createData(collection.getId(), storedDocument.getId(), data);
storedDocument.setData(storedData);
Document storedDocumentCopy = new Document(storedDocument);
collectionAdapter.updateCollectionMetadata(collection, data.keySet(), Collections.emptySet());
storedDocument.setData(constraintManager.decodeDataTypes(collection, storedData));
return new Tuple<>(storedDocumentCopy, storedDocument);
}
use of io.lumeer.core.util.Tuple in project engine by Lumeer.
the class LinkInstanceFacade method readLinkTypeAndInstance.
private Tuple<LinkType, LinkInstance> readLinkTypeAndInstance(String linkInstanceId) {
final LinkInstance linkInstance = LinkInstanceUtils.loadLinkInstanceWithData(linkInstanceDao, linkDataDao, linkInstanceId);
LinkType linkType = linkTypeDao.getLinkType(linkInstance.getLinkTypeId());
return new Tuple<>(linkType, linkInstance);
}
use of io.lumeer.core.util.Tuple in project engine by Lumeer.
the class AutoLinkRuleTaskExecutor method addLinks.
private void addLinks(final TaskExecutor taskExecutor, final List<LinkInstance> links, final DocumentMatcher matcher) {
final String thisCollection = matcher.getThisCollection().getId();
if (thisCollection.equals(matcher.getThatCollection().getId())) {
return;
}
final String thisDocumentId = matcher.getThisDocument().getId();
final Set<String> alreadyLinkedDocumentIds = links.stream().map(link -> {
final var res = new ArrayList<>(link.getDocumentIds());
res.remove(thisDocumentId);
return res.get(0);
}).collect(toSet());
final Tuple<List<Document>, List<LinkInstance>> newLinks = matcher.filterForCreation();
final Set<String> targetDocuments = newLinks.getFirst().stream().map(Document::getId).filter(id -> !alreadyLinkedDocumentIds.contains(id)).collect(toSet());
if (targetDocuments.size() > 0) {
final List<LinkInstance> linkInstances = targetDocuments.stream().filter(documentId -> !documentId.equals(matcher.getNewDocument().getId())).map(documentId -> {
var l = new LinkInstance(rule.getLinkType(), Arrays.asList(matcher.getNewDocument().getId(), documentId));
l.setCreatedBy(ruleTask.getInitiator().getId());
l.setCreationDate(ZonedDateTime.now());
return l;
}).collect(toList());
if (!linkInstances.isEmpty()) {
ruleTask.getDaoContextSnapshot().getLinkInstanceDao().createLinkInstances(linkInstances);
changesTracker.updateLinkTypesMap(Map.of(matcher.getLinkType().getId(), matcher.getLinkType()));
changesTracker.addCreatedLinkInstances(linkInstances);
linkInstances.forEach(link -> {
var decodedCreatedData = constraintManager.decodeDataTypes(matcher.getLinkType(), link.getData());
auditAdapter.registerCreate(link.getLinkTypeId(), ResourceType.LINK, link.getId(), ruleTask.getInitiator(), ruleName, null, decodedCreatedData);
});
final FunctionFacade functionFacade = ruleTask.getFunctionFacade();
linkInstances.forEach(linkInstance -> {
taskExecutor.submitTask(functionFacade.createTaskForCreatedLinks(matcher.getLinkType(), Collections.singletonList(linkInstance)));
});
}
}
}
use of io.lumeer.core.util.Tuple in project engine by Lumeer.
the class DocumentFacade method createDocumentsChain.
public DocumentsChain createDocumentsChain(List<Document> documents, List<LinkInstance> linkInstances) {
var collectionsMap = documents.stream().filter(document -> document.getId() == null).map(document -> checkCreateDocuments(document.getCollectionId())).collect(Collectors.toMap(Resource::getId, Function.identity()));
var linkTypesMap = linkInstances.stream().filter(linkInstance -> linkInstance.getId() == null).map(linkInstanceId -> checkCreateLinks(linkInstanceId.getLinkTypeId())).collect(Collectors.toMap(LinkType::getId, Function.identity()));
permissionsChecker.checkDocumentLimits(documents);
if (documents.isEmpty()) {
return new DocumentsChain(Collections.emptyList(), Collections.emptyList());
}
List<Document> createdDocuments = new ArrayList<>();
List<LinkInstance> createdLinks = new ArrayList<>();
String previousDocumentId = linkInstances.size() == documents.size() ? Utils.firstNotNullElement(linkInstances.get(0).getDocumentIds()) : null;
var linkInstanceIndex = 0;
for (Document document : documents) {
String currentDocumentId;
if (document.getId() != null) {
currentDocumentId = document.getId();
} else {
var collection = collectionsMap.get(document.getCollectionId());
var tuple = createDocument(collection, document);
createdDocuments.add(tuple.getSecond());
currentDocumentId = tuple.getFirst().getId();
collectionAdapter.updateCollectionMetadata(collection, tuple.getSecond().getData().keySet(), Collections.emptySet());
}
var linkInstance = linkInstances.size() > linkInstanceIndex ? linkInstances.get(linkInstanceIndex) : null;
if (previousDocumentId != null && linkInstance != null) {
linkInstance.setDocumentIds(Arrays.asList(previousDocumentId, currentDocumentId));
if (linkInstance.getId() != null) {
var updatedLinkInstance = linkInstanceDao.updateLinkInstance(linkInstance.getId(), linkInstance);
updatedLinkInstance.setData(linkInstance.getData());
createdLinks.add(updatedLinkInstance);
} else {
var linkType = linkTypesMap.get(linkInstance.getLinkTypeId());
var linkData = linkInstanceFacade.createLinkInstance(linkType, linkInstance);
createdLinks.add(linkData.getSecond());
}
linkInstanceIndex++;
}
previousDocumentId = currentDocumentId;
}
if (this.createChainEvent != null) {
this.createChainEvent.fire(new CreateDocumentsAndLinks(createdDocuments, createdLinks));
}
return new DocumentsChain(createdDocuments, createdLinks);
}
use of io.lumeer.core.util.Tuple in project engine by Lumeer.
the class DelayedActionFacade method getDocumentAndCollection.
private Tuple<Document, Collection> getDocumentAndCollection(final ResourceComment comment) {
final List<Document> docs = documentFacade.getDocuments(Set.of(comment.getResourceId()));
if (docs.size() == 1) {
final Document doc = docs.get(0);
final Collection collection = collectionDao.getCollectionById(doc.getCollectionId());
return new Tuple<>(doc, collection);
}
return null;
}
Aggregations