001/*
002 * The contents of this file are subject to the license and copyright
003 * detailed in the LICENSE and NOTICE files at the root of the source
004 * tree.
005 */
006package org.fcrepo.kernel.impl.operations;
007
008import org.apache.jena.rdf.model.Model;
009
010import org.fcrepo.config.ServerManagedPropsMode;
011import org.fcrepo.kernel.api.RdfStream;
012import org.fcrepo.kernel.api.Transaction;
013import org.fcrepo.kernel.api.identifiers.FedoraId;
014import org.fcrepo.kernel.api.operations.CreateRdfSourceOperation;
015import org.fcrepo.kernel.api.operations.CreateRdfSourceOperationBuilder;
016
017/**
018 * Builder for operations to create rdf sources
019 *
020 * @author bbpennel
021 */
022public class CreateRdfSourceOperationBuilderImpl extends AbstractRdfSourceOperationBuilder implements
023        CreateRdfSourceOperationBuilder {
024
025    private FedoraId parentId;
026
027    private boolean archivalGroup = false;
028    private boolean isOverwrite = false;
029
030    /**
031     * Constructor.
032     *
033     * @param transaction the transaction
034     * @param resourceId the internal identifier.
035     * @param interactionModel interaction model
036     * @param serverManagedPropsMode server managed props mode
037     */
038    public CreateRdfSourceOperationBuilderImpl(final Transaction transaction, final FedoraId resourceId,
039                                               final String interactionModel,
040                                               final ServerManagedPropsMode serverManagedPropsMode) {
041        super(transaction, resourceId, interactionModel, serverManagedPropsMode);
042    }
043
044    @Override
045    public CreateRdfSourceOperation build() {
046        final var operation =
047            isOverwrite ? new OverwriteRdfTombstoneOperation(transaction, rescId, interactionModel, tripleStream)
048                        : new CreateRdfSourceOperationImpl(transaction, rescId, interactionModel, tripleStream);
049        operation.setParentId(parentId);
050        operation.setUserPrincipal(userPrincipal);
051        operation.setCreatedBy(createdBy);
052        operation.setCreatedDate(createdDate);
053        operation.setLastModifiedBy(lastModifiedBy);
054        operation.setLastModifiedDate(lastModifiedDate);
055        operation.setArchivalGroup(archivalGroup);
056        return operation;
057    }
058
059    @Override
060    public CreateRdfSourceOperationBuilder userPrincipal(final String userPrincipal) {
061        super.userPrincipal(userPrincipal);
062        return this;
063    }
064
065    @Override
066    public CreateRdfSourceOperationBuilder triples(final RdfStream triples) {
067        super.triples(triples);
068        return this;
069    }
070
071    @Override
072    public CreateRdfSourceOperationBuilder parentId(final FedoraId parentId) {
073        this.parentId = parentId;
074        return this;
075    }
076
077    @Override
078    public CreateRdfSourceOperationBuilder relaxedProperties(final Model model) {
079        super.relaxedProperties(model);
080        return this;
081    }
082
083    @Override
084    public CreateRdfSourceOperationBuilder archivalGroup(final boolean flag) {
085        this.archivalGroup = flag;
086        return this;
087    }
088
089    @Override
090    public CreateRdfSourceOperationBuilder isOverwrite(final boolean isOverwrite) {
091        this.isOverwrite = isOverwrite;
092        return this;
093    }
094
095}