use of io.lumeer.core.task.RuleTask in project engine by Lumeer.
the class TaskProcessingFacade method onDocumentUpdate.
public void onDocumentUpdate(final UpdateDocument updateDocument, final String skipTask) {
final Collection collection = getCollectionForEvent(updateDocument);
if (collection == null) {
return;
}
FunctionTask functionTask = functionFacade.createTaskForUpdateDocument(collection, new Document(updateDocument.getOriginalDocument()), new Document(updateDocument.getDocument()));
List<RuleTask> tasks = createDocumentUpdateRuleTasks(collection, updateDocument, skipTask);
RuleTask ruleTask = createOrderedRuleTask(tasks);
processTasks(functionTask, ruleTask);
}
use of io.lumeer.core.task.RuleTask in project engine by Lumeer.
the class TaskProcessingFacade method runRule.
public void runRule(final Collection collection, final String ruleName, final Document document, final String actionName) {
if (collection != null && document != null) {
Optional<RuleTask> task = createRuleTask(collection, ruleName, null, document);
Task t = task.orElse(null);
while (t != null) {
if (t instanceof RuleTask) {
((RuleTask) t).setActionName(actionName);
}
t = t.getParent();
}
task.ifPresent(this::processTasks);
}
}
use of io.lumeer.core.task.RuleTask in project engine by Lumeer.
the class TaskProcessingFacade method onUpdateLink.
public void onUpdateLink(final UpdateLinkInstance updateLinkEvent, final String skipTask) {
LinkType linkType = getLinkTypeForEvent(updateLinkEvent);
if (linkType == null) {
return;
}
FunctionTask functionTask = functionFacade.creatTaskForChangedLink(linkType, new LinkInstance(updateLinkEvent.getOriginalLinkInstance()), new LinkInstance(updateLinkEvent.getLinkInstance()));
List<RuleTask> tasks = createLinkInstanceUpdateRuleTasks(linkType, updateLinkEvent, skipTask);
RuleTask ruleTask = createOrderedRuleTask(tasks);
processTasks(functionTask, ruleTask);
}
use of io.lumeer.core.task.RuleTask in project engine by Lumeer.
the class TaskProcessingFacade method onRemoveDocument.
public void onRemoveDocument(@Observes final RemoveDocument removeDocument) {
final Collection collection = getCollectionForEvent(removeDocument);
if (collection == null) {
return;
}
FunctionTask functionTask = functionFacade.createTaskForRemovedDocument(collection, new Document(removeDocument.getDocument()));
List<RuleTask> tasks = createDocumentRemoveRuleTasks(collection, removeDocument.getDocument());
RuleTask ruleTask = createOrderedRuleTask(tasks);
processTasks(functionTask, ruleTask);
}
use of io.lumeer.core.task.RuleTask in project engine by Lumeer.
the class CollectionFacade method runRule.
public void runRule(final Collection collection, final String ruleId) {
if (adapter.getDocumentsCountByCollection(collection.getId()) > 2_000) {
throw new UnsuccessfulOperationException("Too many documents in the source collection");
}
final Rule rule = collection.getRules().get(ruleId);
if (rule != null && rule.getType() == Rule.RuleType.AUTO_LINK) {
final AutoLinkRule autoLinkRule = new AutoLinkRule(rule);
final String otherCollectionId = autoLinkRule.getCollection2().equals(collection.getId()) ? autoLinkRule.getCollection1() : autoLinkRule.getCollection2();
final String attributeId = autoLinkRule.getCollection1().equals(collection.getId()) ? autoLinkRule.getAttribute1() : autoLinkRule.getAttribute2();
final Attribute attribute = collection.getAttributes().stream().filter(a -> a.getId().equals(attributeId)).findFirst().orElse(null);
final Collection otherCollection = getCollection(otherCollectionId);
final String otherAttributeId = autoLinkRule.getCollection2().equals(collection.getId()) ? autoLinkRule.getAttribute1() : autoLinkRule.getAttribute2();
final Attribute otherAttribute = otherCollection.getAttributes().stream().filter(a -> a.getId().equals(otherAttributeId)).findFirst().orElse(null);
final Map<String, AllowedPermissions> permissions = permissionsChecker.getCollectionsPermissions(List.of(collection, otherCollection));
if (adapter.getDocumentsCountByCollection(otherCollectionId) > 10_000) {
throw new UnsuccessfulOperationException("Too many documents in the target collection");
}
final LinkType linkType = linkTypeDao.getLinkType(autoLinkRule.getLinkType());
final AutoLinkBatchTask task = taskFactory.getInstance(AutoLinkBatchTask.class);
task.setupBatch(autoLinkRule, linkType, collection, attribute, otherCollection, otherAttribute, getCurrentUser(), permissions);
taskExecutor.submitTask(task);
} else if (rule != null && rule.getType() == Rule.RuleType.CRON) {
final CronRule cronRule = new CronRule(rule);
List<Document> documents = new ArrayList<>();
if (cronRule.getViewId() != null) {
try {
final View view = viewDao.getViewById(cronRule.getViewId());
final User user = AuthenticatedUser.getMachineUser();
final AllowedPermissions allowedPermissions = AllowedPermissions.allAllowed();
documents = DocumentUtils.getDocuments(collectionDao, documentDao, dataDao, userDao, groupDao, selectionListDao, getOrganization(), getProject(), view.getQuery(), user, cronRule.getLanguage(), allowedPermissions, null);
documents = documents.stream().filter(document -> document.getCollectionId().equals(collection.getId())).collect(Collectors.toList());
} catch (ResourceNotFoundException ignore) {
}
}
RuleTask task = taskFactory.getInstance(RuleTask.class);
task.setRule(rule.getName(), rule, collection, documents);
taskExecutor.submitTask(task);
}
}
Aggregations