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.persistence.common;
007
008import java.net.URI;
009import java.time.Instant;
010import java.util.Collection;
011
012import org.fcrepo.kernel.api.identifiers.FedoraId;
013import org.fcrepo.kernel.api.models.ResourceHeaders;
014
015/**
016 * Common implementation of resource headers
017 *
018 * @author bbpennel
019 */
020public class ResourceHeadersImpl implements ResourceHeaders {
021
022    private FedoraId id;
023
024    private FedoraId parent;
025
026    private FedoraId archivalGroupId;
027
028    private String stateToken;
029
030    private String interactionModel;
031
032    private String mimeType;
033
034    private String filename;
035
036    private long contentSize;
037
038    private Collection<URI> digests;
039
040    private String externalUrl;
041
042    private String externalHandling;
043
044    private Instant createdDate;
045
046    private String createdBy;
047
048    private Instant lastModifiedDate;
049
050    private String lastModifiedBy;
051
052    private Instant mementoCreatedDate;
053
054    private boolean archivalGroup;
055
056    private boolean objectRoot;
057
058    private boolean deleted;
059
060    private String contentPath;
061
062    private String headersVersion;
063
064    private String storageRelativePath;
065
066    @Override
067    public FedoraId getId() {
068        return id;
069    }
070
071    /**
072     * @param id the fedora id to set
073     */
074    public void setId(final FedoraId id) {
075        this.id = id;
076    }
077
078    @Override
079    public FedoraId getParent() {
080        return parent;
081    }
082
083    /**
084     * @param parent the parent to set
085     */
086    public void setParent(final FedoraId parent) {
087        this.parent = parent;
088    }
089
090    @Override
091    public FedoraId getArchivalGroupId() {
092        return archivalGroupId;
093    }
094
095    /**
096     * @param archivalGroupId the archivalGroupId to set
097     */
098    public void setArchivalGroupId(final FedoraId archivalGroupId) {
099        this.archivalGroupId = archivalGroupId;
100    }
101
102    @Override
103    public String getStateToken() {
104        return stateToken;
105    }
106
107    /**
108     * @param stateToken the stateToken to set
109     */
110    public void setStateToken(final String stateToken) {
111        this.stateToken = stateToken;
112    }
113
114    @Override
115    public String getInteractionModel() {
116        return interactionModel;
117    }
118
119    /**
120     * @param interactionModel the interactionModel to set
121     */
122    public void setInteractionModel(final String interactionModel) {
123        this.interactionModel = interactionModel;
124    }
125
126    @Override
127    public String getMimeType() {
128        return mimeType;
129    }
130
131    /**
132     * @param mimeType the mimeType to set
133     */
134    public void setMimeType(final String mimeType) {
135        this.mimeType = mimeType;
136    }
137
138    @Override
139    public String getFilename() {
140        return filename;
141    }
142
143    /**
144     * @param filename the filename to set
145     */
146    public void setFilename(final String filename) {
147        this.filename = filename;
148    }
149
150    @Override
151    public long getContentSize() {
152        return contentSize;
153    }
154
155    /**
156     * @param contentSize the contentSize to set
157     */
158    public void setContentSize(final long contentSize) {
159        this.contentSize = contentSize;
160    }
161
162    @Override
163    public Collection<URI> getDigests() {
164        return digests;
165    }
166
167    /**
168     * @param digests the digests to set
169     */
170    public void setDigests(final Collection<URI> digests) {
171        this.digests = digests;
172    }
173
174    @Override
175    public String getExternalHandling() {
176        return externalHandling;
177    }
178
179    /**
180     * @param externalHandling the externalHandling to set
181     */
182    public void setExternalHandling(final String externalHandling) {
183        this.externalHandling = externalHandling;
184    }
185
186    @Override
187    public Instant getCreatedDate() {
188        return createdDate;
189    }
190
191    /**
192     * @param createdDate the createdDate to set
193     */
194    public void setCreatedDate(final Instant createdDate) {
195        this.createdDate = createdDate;
196    }
197
198    @Override
199    public String getCreatedBy() {
200        return createdBy;
201    }
202
203    /**
204     * @param createdBy the createdBy to set
205     */
206    public void setCreatedBy(final String createdBy) {
207        this.createdBy = createdBy;
208    }
209
210    @Override
211    public Instant getLastModifiedDate() {
212        return lastModifiedDate;
213    }
214
215    /**
216     * @param lastModifiedDate the lastModifiedDate to set
217     */
218    public void setLastModifiedDate(final Instant lastModifiedDate) {
219        this.lastModifiedDate = lastModifiedDate;
220    }
221
222    @Override
223    public String getLastModifiedBy() {
224        return lastModifiedBy;
225    }
226
227    /**
228     * @param lastModifiedby the lastModifiedby to set
229     */
230    public void setLastModifiedBy(final String lastModifiedby) {
231        this.lastModifiedBy = lastModifiedby;
232    }
233
234    @Override
235    public Instant getMementoCreatedDate() {
236        return mementoCreatedDate;
237    }
238
239    /**
240     * @param mementoCreatedDate the mementoCreateDate to set
241     */
242    public void setMementoCreatedDate(final Instant mementoCreatedDate) {
243        this.mementoCreatedDate = mementoCreatedDate;
244    }
245
246    /**
247     * @param externalUrl the externalUrl to set
248     */
249    public void setExternalUrl(final String externalUrl) {
250        this.externalUrl = externalUrl;
251    }
252
253    @Override
254    public String getExternalUrl() {
255        return externalUrl;
256    }
257
258    /**
259     *
260     * @param flag boolean flag
261     */
262    public void setArchivalGroup(final boolean flag) {
263        this.archivalGroup = flag;
264    }
265
266    @Override
267    public boolean isArchivalGroup() {
268        return archivalGroup;
269    }
270
271    /**
272     * @param flag boolean flag
273     */
274    public void setObjectRoot(final boolean flag) {
275        this.objectRoot = flag;
276    }
277
278    @Override
279    public boolean isObjectRoot() {
280        if (isArchivalGroup()) {
281            return true;
282        } else {
283            return objectRoot;
284        }
285    }
286
287    /**
288     * Set deleted status flag.
289     * @param deleted true if deleted (a tombstone).
290     */
291    public void setDeleted(final boolean deleted) {
292        this.deleted = deleted;
293    }
294
295    /**
296     * {@inheritDoc}
297     */
298    @Override
299    public boolean isDeleted() {
300        return deleted;
301    }
302
303    /**
304     * {@inheritDoc}
305     */
306    @Override
307    public String getContentPath() {
308        return contentPath;
309    }
310
311    /**
312     * Sets the path to the content file associated with the header file
313     *
314     * @param contentPath path to content file
315     */
316    public void setContentPath(final String contentPath) {
317        this.contentPath = contentPath;
318    }
319
320    @Override
321    public String getHeadersVersion() {
322        return headersVersion;
323    }
324
325    /**
326     * @param headersVersion the headers version
327     */
328    public void setHeadersVersion(final String headersVersion) {
329        this.headersVersion = headersVersion;
330    }
331
332    @Override
333    public String getStorageRelativePath() {
334        return storageRelativePath;
335    }
336
337    /**
338     * @param storageRelativePath the storage relative path
339     */
340    public void setStorageRelativePath(final String storageRelativePath) {
341        this.storageRelativePath = storageRelativePath;
342    }
343
344    @Override
345    public String toString() {
346        return "ResourceHeadersImpl{" +
347                "id=" + id +
348                ", parent=" + parent +
349                ", archivalGroupId=" + archivalGroupId +
350                ", stateToken='" + stateToken + '\'' +
351                ", interactionModel='" + interactionModel + '\'' +
352                ", mimeType='" + mimeType + '\'' +
353                ", filename='" + filename + '\'' +
354                ", contentSize=" + contentSize +
355                ", digests=" + digests +
356                ", externalUrl='" + externalUrl + '\'' +
357                ", externalHandling='" + externalHandling + '\'' +
358                ", createdDate=" + createdDate +
359                ", createdBy='" + createdBy + '\'' +
360                ", lastModifiedDate=" + lastModifiedDate +
361                ", lastModifiedBy='" + lastModifiedBy + '\'' +
362                ", mementoCreatedDate=" + mementoCreatedDate +
363                ", archivalGroup=" + archivalGroup +
364                ", objectRoot=" + objectRoot +
365                ", deleted=" + deleted +
366                ", contentPath='" + contentPath + '\'' +
367                ", headersVersion='" + headersVersion + '\'' +
368                '}';
369    }
370
371}