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