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.asResourceId().getFullDescribedId()); 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}