Search in sources :

Example 6 with Tuple

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);
}
Also used : DataDocument(io.lumeer.engine.api.data.DataDocument) DataDocument(io.lumeer.engine.api.data.DataDocument) Document(io.lumeer.api.model.Document) CreateDocument(io.lumeer.engine.api.event.CreateDocument) UpdateDocument(io.lumeer.engine.api.event.UpdateDocument) Tuple(io.lumeer.core.util.Tuple)

Example 7 with Tuple

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);
}
Also used : CreateLinkInstance(io.lumeer.engine.api.event.CreateLinkInstance) LinkInstance(io.lumeer.api.model.LinkInstance) UpdateLinkInstance(io.lumeer.engine.api.event.UpdateLinkInstance) LinkType(io.lumeer.api.model.LinkType) Tuple(io.lumeer.core.util.Tuple)

Example 8 with Tuple

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)));
            });
        }
    }
}
Also used : Tuple(io.lumeer.core.util.Tuple) DocumentMatcher(io.lumeer.core.task.executor.matcher.DocumentMatcher) Arrays(java.util.Arrays) TaskExecutor(io.lumeer.core.task.TaskExecutor) ZonedDateTime(java.time.ZonedDateTime) Document(io.lumeer.api.model.Document) Set(java.util.Set) AutoLinkRule(io.lumeer.api.model.rule.AutoLinkRule) Logger(java.util.logging.Logger) AuditAdapter(io.lumeer.core.adapter.AuditAdapter) StringUtils(org.apache.commons.lang3.StringUtils) LinkInstance(io.lumeer.api.model.LinkInstance) ArrayList(java.util.ArrayList) Level(java.util.logging.Level) Collectors.toList(java.util.stream.Collectors.toList) DefaultConfigurationProducer(io.lumeer.core.facade.configuration.DefaultConfigurationProducer) List(java.util.List) ResourceType(io.lumeer.api.model.ResourceType) RuleTask(io.lumeer.core.task.RuleTask) Map(java.util.Map) Collections(java.util.Collections) Collectors.toSet(java.util.stream.Collectors.toSet) ConstraintManager(io.lumeer.core.constraint.ConstraintManager) FunctionFacade(io.lumeer.core.facade.FunctionFacade) ArrayList(java.util.ArrayList) Collectors.toList(java.util.stream.Collectors.toList) List(java.util.List) LinkInstance(io.lumeer.api.model.LinkInstance) Document(io.lumeer.api.model.Document) FunctionFacade(io.lumeer.core.facade.FunctionFacade)

Example 9 with Tuple

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);
}
Also used : Arrays(java.util.Arrays) ZonedDateTime(java.time.ZonedDateTime) DocumentsChain(io.lumeer.api.model.DocumentsChain) LinkTypeDao(io.lumeer.storage.api.dao.LinkTypeDao) HashMap(java.util.HashMap) DocumentAdapter(io.lumeer.core.adapter.DocumentAdapter) Function(java.util.function.Function) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Inject(javax.inject.Inject) CollectionDao(io.lumeer.storage.api.dao.CollectionDao) DataDao(io.lumeer.storage.api.dao.DataDao) ResourceType(io.lumeer.api.model.ResourceType) Resource(io.lumeer.api.model.common.Resource) Map(java.util.Map) ResourceCommentDao(io.lumeer.storage.api.dao.ResourceCommentDao) CollectionAdapter(io.lumeer.core.adapter.CollectionAdapter) ImportCollectionContent(io.lumeer.engine.api.event.ImportCollectionContent) ConstraintManager(io.lumeer.core.constraint.ConstraintManager) Tuple(io.lumeer.core.util.Tuple) Event(javax.enterprise.event.Event) DocumentDao(io.lumeer.storage.api.dao.DocumentDao) DataDocument(io.lumeer.engine.api.data.DataDocument) ResourceNotFoundException(io.lumeer.storage.api.exception.ResourceNotFoundException) Document(io.lumeer.api.model.Document) CreateDocument(io.lumeer.engine.api.event.CreateDocument) Set(java.util.Set) UUID(java.util.UUID) Constraint(io.lumeer.api.model.Constraint) Collectors(java.util.stream.Collectors) LinkInstance(io.lumeer.api.model.LinkInstance) LinkType(io.lumeer.api.model.LinkType) DocumentUtils(io.lumeer.core.util.DocumentUtils) Objects(java.util.Objects) FileAttachment(io.lumeer.api.model.FileAttachment) Project(io.lumeer.api.model.Project) LinkInstanceDao(io.lumeer.storage.api.dao.LinkInstanceDao) DefaultConfigurationProducer(io.lumeer.core.facade.configuration.DefaultConfigurationProducer) List(java.util.List) ResourceUtils(io.lumeer.api.util.ResourceUtils) RequestScoped(javax.enterprise.context.RequestScoped) PostConstruct(javax.annotation.PostConstruct) FavoriteItemDao(io.lumeer.storage.api.dao.FavoriteItemDao) UpdateDocument(io.lumeer.engine.api.event.UpdateDocument) Utils(io.lumeer.core.util.Utils) Collections(java.util.Collections) Collection(io.lumeer.api.model.Collection) CreateDocumentsAndLinks(io.lumeer.engine.api.event.CreateDocumentsAndLinks) DocumentsChain(io.lumeer.api.model.DocumentsChain) ArrayList(java.util.ArrayList) CreateDocumentsAndLinks(io.lumeer.engine.api.event.CreateDocumentsAndLinks) LinkInstance(io.lumeer.api.model.LinkInstance) DataDocument(io.lumeer.engine.api.data.DataDocument) Document(io.lumeer.api.model.Document) CreateDocument(io.lumeer.engine.api.event.CreateDocument) UpdateDocument(io.lumeer.engine.api.event.UpdateDocument)

Example 10 with Tuple

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;
}
Also used : Collection(io.lumeer.api.model.Collection) Document(io.lumeer.api.model.Document) RemoveDocument(io.lumeer.engine.api.event.RemoveDocument) CreateDocument(io.lumeer.engine.api.event.CreateDocument) UpdateDocument(io.lumeer.engine.api.event.UpdateDocument) Tuple(io.lumeer.core.util.Tuple)

Aggregations

Tuple (io.lumeer.core.util.Tuple)11 Document (io.lumeer.api.model.Document)9 LinkInstance (io.lumeer.api.model.LinkInstance)7 Collection (io.lumeer.api.model.Collection)6 LinkType (io.lumeer.api.model.LinkType)5 Query (io.lumeer.api.model.Query)4 CreateDocument (io.lumeer.engine.api.event.CreateDocument)4 UpdateDocument (io.lumeer.engine.api.event.UpdateDocument)4 HashSet (java.util.HashSet)4 DataDocument (io.lumeer.engine.api.data.DataDocument)3 AllowedPermissions (io.lumeer.api.model.AllowedPermissions)2 ResourceType (io.lumeer.api.model.ResourceType)2 ConstraintManager (io.lumeer.core.constraint.ConstraintManager)2 DefaultConfigurationProducer (io.lumeer.core.facade.configuration.DefaultConfigurationProducer)2 CreateLinkInstance (io.lumeer.engine.api.event.CreateLinkInstance)2 UpdateLinkInstance (io.lumeer.engine.api.event.UpdateLinkInstance)2 ZonedDateTime (java.time.ZonedDateTime)2 ArrayList (java.util.ArrayList)2 Arrays (java.util.Arrays)2 Collections (java.util.Collections)2