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;
009import org.fcrepo.config.ServerManagedPropsMode;
010import org.fcrepo.kernel.api.Transaction;
011import org.fcrepo.kernel.api.identifiers.FedoraId;
012import org.fcrepo.kernel.api.operations.RelaxableResourceOperationBuilder;
013
014import java.time.Instant;
015
016import static org.fcrepo.kernel.api.utils.RelaxedPropertiesHelper.getCreatedBy;
017import static org.fcrepo.kernel.api.utils.RelaxedPropertiesHelper.getCreatedDate;
018import static org.fcrepo.kernel.api.utils.RelaxedPropertiesHelper.getModifiedBy;
019import static org.fcrepo.kernel.api.utils.RelaxedPropertiesHelper.getModifiedDate;
020
021/**
022 * Abstract builder for constructing relaxable resource operations
023 * @author bbpennel
024 */
025public abstract class AbstractRelaxableResourceOperationBuilder extends AbstractResourceOperationBuilder
026                                                                implements RelaxableResourceOperationBuilder {
027    protected String lastModifiedBy;
028
029    protected String createdBy;
030
031    protected Instant lastModifiedDate;
032
033    protected Instant createdDate;
034
035    protected ServerManagedPropsMode serverManagedPropsMode;
036
037    protected AbstractRelaxableResourceOperationBuilder(final Transaction transaction, final FedoraId rescId,
038                                                        final ServerManagedPropsMode serverManagedPropsMode) {
039        super(transaction, rescId);
040        this.serverManagedPropsMode = serverManagedPropsMode;
041    }
042
043    @Override
044    public RelaxableResourceOperationBuilder relaxedProperties(final Model model) {
045        // Has no affect if the server is not in relaxed mode
046        if (model != null && serverManagedPropsMode == ServerManagedPropsMode.RELAXED) {
047            final var resc = model.getResource(rescId.getResourceId());
048
049            final var createdDateVal = getCreatedDate(resc);
050            if (createdDateVal != null) {
051                this.createdDate = createdDateVal.toInstant();
052            }
053            final var createdByVal = getCreatedBy(resc);
054            if (createdByVal != null) {
055                this.createdBy = createdByVal;
056            }
057            final var modifiedDate = getModifiedDate(resc);
058            if (modifiedDate != null) {
059                this.lastModifiedDate = modifiedDate.toInstant();
060            }
061            final var modifiedBy = getModifiedBy(resc);
062            if (modifiedBy != null) {
063                this.lastModifiedBy = modifiedBy;
064            }
065        }
066
067        return this;
068    }
069}