001/* 002 * Licensed to DuraSpace under one or more contributor license agreements. 003 * See the NOTICE file distributed with this work for additional information 004 * regarding copyright ownership. 005 * 006 * DuraSpace licenses this file to you under the Apache License, 007 * Version 2.0 (the "License"); you may not use this file except in 008 * compliance with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 019package org.fcrepo.persistence.ocfl.impl; 020 021import org.fcrepo.kernel.api.identifiers.FedoraId; 022import org.fcrepo.kernel.api.models.ResourceHeaders; 023import org.fcrepo.persistence.common.ResourceHeadersImpl; 024 025import java.net.URI; 026import java.time.Instant; 027import java.util.ArrayList; 028import java.util.Collection; 029import java.util.Objects; 030 031/** 032 * Adapter for converting between different ResourceHeader implementations. 033 * 034 * @author pwinckles 035 */ 036public class ResourceHeadersAdapter implements ResourceHeaders { 037 038 private final ResourceHeadersImpl kernelHeaders; 039 private final org.fcrepo.storage.ocfl.ResourceHeaders.Builder storageHeaders; 040 041 /** 042 * Default constructor 043 */ 044 public ResourceHeadersAdapter() { 045 kernelHeaders = new ResourceHeadersImpl(); 046 storageHeaders = org.fcrepo.storage.ocfl.ResourceHeaders.builder(); 047 } 048 049 /** 050 * @param storageHeaders storage headers to adapt 051 */ 052 public ResourceHeadersAdapter(final org.fcrepo.storage.ocfl.ResourceHeaders storageHeaders) { 053 this.storageHeaders = org.fcrepo.storage.ocfl.ResourceHeaders 054 .builder(Objects.requireNonNull(storageHeaders, "storageHeaders cannot be null")); 055 this.kernelHeaders = new ResourceHeadersImpl(); 056 057 if (storageHeaders.getId() != null) { 058 kernelHeaders.setId(FedoraId.create(storageHeaders.getId())); 059 } 060 if (storageHeaders.getParent() != null) { 061 kernelHeaders.setParent(FedoraId.create(storageHeaders.getParent())); 062 } 063 if (storageHeaders.getArchivalGroupId() != null) { 064 kernelHeaders.setArchivalGroupId(FedoraId.create(storageHeaders.getArchivalGroupId())); 065 } 066 kernelHeaders.setArchivalGroup(storageHeaders.isArchivalGroup()); 067 kernelHeaders.setContentPath(storageHeaders.getContentPath()); 068 kernelHeaders.setContentSize(storageHeaders.getContentSize()); 069 kernelHeaders.setCreatedBy(storageHeaders.getCreatedBy()); 070 kernelHeaders.setCreatedDate(storageHeaders.getCreatedDate()); 071 kernelHeaders.setDeleted(storageHeaders.isDeleted()); 072 kernelHeaders.setDigests(new ArrayList<>(storageHeaders.getDigests())); 073 this.storageHeaders.withDigests(kernelHeaders.getDigests()); 074 kernelHeaders.setExternalHandling(storageHeaders.getExternalHandling()); 075 kernelHeaders.setExternalUrl(storageHeaders.getExternalUrl()); 076 kernelHeaders.setFilename(storageHeaders.getFilename()); 077 kernelHeaders.setInteractionModel(storageHeaders.getInteractionModel()); 078 kernelHeaders.setLastModifiedBy(storageHeaders.getLastModifiedBy()); 079 kernelHeaders.setLastModifiedDate(storageHeaders.getLastModifiedDate()); 080 kernelHeaders.setMementoCreatedDate(storageHeaders.getMementoCreatedDate()); 081 kernelHeaders.setMimeType(storageHeaders.getMimeType()); 082 kernelHeaders.setObjectRoot(storageHeaders.isObjectRoot()); 083 kernelHeaders.setStateToken(storageHeaders.getStateToken()); 084 kernelHeaders.setHeadersVersion(storageHeaders.getHeadersVersion()); 085 } 086 087 /** 088 * @param kernelHeaders kernel headers to adapt 089 */ 090 public ResourceHeadersAdapter(final ResourceHeadersImpl kernelHeaders) { 091 this.kernelHeaders = Objects.requireNonNull(kernelHeaders, "kernelHeaders cannot be null"); 092 this.storageHeaders = org.fcrepo.storage.ocfl.ResourceHeaders.builder(); 093 094 if (kernelHeaders.getId() != null) { 095 storageHeaders.withId(kernelHeaders.getId().getFullId()); 096 } 097 if (kernelHeaders.getParent() != null) { 098 storageHeaders.withParent(kernelHeaders.getParent().getFullId()); 099 } 100 if (kernelHeaders.getArchivalGroupId() != null) { 101 storageHeaders.withArchivalGroupId(kernelHeaders.getArchivalGroupId().getFullId()); 102 } 103 storageHeaders.withArchivalGroup(kernelHeaders.isArchivalGroup()); 104 storageHeaders.withContentPath(kernelHeaders.getContentPath()); 105 storageHeaders.withContentSize(kernelHeaders.getContentSize()); 106 storageHeaders.withCreatedBy(kernelHeaders.getCreatedBy()); 107 storageHeaders.withCreatedDate(kernelHeaders.getCreatedDate()); 108 storageHeaders.withDeleted(kernelHeaders.isDeleted()); 109 storageHeaders.withDigests(kernelHeaders.getDigests()); 110 storageHeaders.withExternalHandling(kernelHeaders.getExternalHandling()); 111 storageHeaders.withExternalUrl(kernelHeaders.getExternalUrl()); 112 storageHeaders.withFilename(kernelHeaders.getFilename()); 113 storageHeaders.withInteractionModel(kernelHeaders.getInteractionModel()); 114 storageHeaders.withLastModifiedBy(kernelHeaders.getLastModifiedBy()); 115 storageHeaders.withLastModifiedDate(kernelHeaders.getLastModifiedDate()); 116 storageHeaders.withMementoCreatedDate(kernelHeaders.getMementoCreatedDate()); 117 storageHeaders.withMimeType(kernelHeaders.getMimeType()); 118 storageHeaders.withObjectRoot(kernelHeaders.isObjectRoot()); 119 storageHeaders.withStateToken(kernelHeaders.getStateToken()); 120 storageHeaders.withHeadersVersion(kernelHeaders.getHeadersVersion()); 121 } 122 123 /** 124 * @return the headers as storage headers 125 */ 126 public org.fcrepo.storage.ocfl.ResourceHeaders asStorageHeaders() { 127 return storageHeaders.build(); 128 } 129 130 /** 131 * @return the headers as kernel headers 132 */ 133 public ResourceHeadersImpl asKernelHeaders() { 134 return kernelHeaders; 135 } 136 137 private String idToString(final FedoraId id) { 138 if (id == null) { 139 return null; 140 } 141 return id.getFullId(); 142 } 143 144 @Override 145 public FedoraId getId() { 146 return kernelHeaders.getId(); 147 } 148 149 /** 150 * @param id the fedora id to set 151 */ 152 public void setId(final FedoraId id) { 153 kernelHeaders.setId(id); 154 storageHeaders.withId(idToString(id)); 155 } 156 157 @Override 158 public FedoraId getParent() { 159 return kernelHeaders.getParent(); 160 } 161 162 /** 163 * @param parent the parent to set 164 */ 165 public void setParent(final FedoraId parent) { 166 kernelHeaders.setParent(parent); 167 storageHeaders.withParent(idToString(parent)); 168 } 169 170 @Override 171 public FedoraId getArchivalGroupId() { 172 return kernelHeaders.getArchivalGroupId(); 173 } 174 175 /** 176 * @param archivalGroupId the archivalGroupId to set 177 */ 178 public void setArchivalGroupId(final FedoraId archivalGroupId) { 179 kernelHeaders.setArchivalGroupId(archivalGroupId); 180 storageHeaders.withArchivalGroupId(idToString(archivalGroupId)); 181 } 182 183 @Override 184 public String getStateToken() { 185 return kernelHeaders.getStateToken(); 186 } 187 188 /** 189 * @param stateToken the stateToken to set 190 */ 191 public void setStateToken(final String stateToken) { 192 kernelHeaders.setStateToken(stateToken); 193 storageHeaders.withStateToken(stateToken); 194 } 195 196 @Override 197 public String getInteractionModel() { 198 return kernelHeaders.getInteractionModel(); 199 } 200 201 /** 202 * @param interactionModel the interactionModel to set 203 */ 204 public void setInteractionModel(final String interactionModel) { 205 kernelHeaders.setInteractionModel(interactionModel); 206 storageHeaders.withInteractionModel(interactionModel); 207 } 208 209 @Override 210 public String getMimeType() { 211 return kernelHeaders.getMimeType(); 212 } 213 214 /** 215 * @param mimeType the mimeType to set 216 */ 217 public void setMimeType(final String mimeType) { 218 kernelHeaders.setMimeType(mimeType); 219 storageHeaders.withMimeType(mimeType); 220 } 221 222 @Override 223 public String getFilename() { 224 return kernelHeaders.getFilename(); 225 } 226 227 /** 228 * @param filename the filename to set 229 */ 230 public void setFilename(final String filename) { 231 kernelHeaders.setFilename(filename); 232 storageHeaders.withFilename(filename); 233 } 234 235 @Override 236 public long getContentSize() { 237 return kernelHeaders.getContentSize(); 238 } 239 240 /** 241 * @param contentSize the contentSize to set 242 */ 243 public void setContentSize(final Long contentSize) { 244 kernelHeaders.setContentSize(contentSize); 245 storageHeaders.withContentSize(contentSize); 246 } 247 248 @Override 249 public Collection<URI> getDigests() { 250 return kernelHeaders.getDigests(); 251 } 252 253 /** 254 * @param digests the digests to set 255 */ 256 public void setDigests(final Collection<URI> digests) { 257 kernelHeaders.setDigests(digests); 258 storageHeaders.withDigests(digests); 259 } 260 261 @Override 262 public String getExternalHandling() { 263 return kernelHeaders.getExternalHandling(); 264 } 265 266 /** 267 * @param externalHandling the externalHandling to set 268 */ 269 public void setExternalHandling(final String externalHandling) { 270 kernelHeaders.setExternalHandling(externalHandling); 271 storageHeaders.withExternalHandling(externalHandling); 272 } 273 274 @Override 275 public Instant getCreatedDate() { 276 return kernelHeaders.getCreatedDate(); 277 } 278 279 /** 280 * @param createdDate the createdDate to set 281 */ 282 public void setCreatedDate(final Instant createdDate) { 283 kernelHeaders.setCreatedDate(createdDate); 284 storageHeaders.withCreatedDate(createdDate); 285 } 286 287 @Override 288 public String getCreatedBy() { 289 return kernelHeaders.getCreatedBy(); 290 } 291 292 /** 293 * @param createdBy the createdBy to set 294 */ 295 public void setCreatedBy(final String createdBy) { 296 kernelHeaders.setCreatedBy(createdBy); 297 storageHeaders.withCreatedBy(createdBy); 298 } 299 300 @Override 301 public Instant getLastModifiedDate() { 302 return kernelHeaders.getLastModifiedDate(); 303 } 304 305 /** 306 * @param lastModifiedDate the lastModifiedDate to set 307 */ 308 public void setLastModifiedDate(final Instant lastModifiedDate) { 309 kernelHeaders.setLastModifiedDate(lastModifiedDate); 310 storageHeaders.withLastModifiedDate(lastModifiedDate); 311 } 312 313 @Override 314 public String getLastModifiedBy() { 315 return kernelHeaders.getLastModifiedBy(); 316 } 317 318 /** 319 * @param lastModifiedBy the lastModifiedBy to set 320 */ 321 public void setLastModifiedBy(final String lastModifiedBy) { 322 kernelHeaders.setLastModifiedBy(lastModifiedBy); 323 storageHeaders.withLastModifiedBy(lastModifiedBy); 324 } 325 326 @Override 327 public Instant getMementoCreatedDate() { 328 return kernelHeaders.getMementoCreatedDate(); 329 } 330 331 /** 332 * @param mementoCreatedDate the mementoCreatedDate to set 333 */ 334 public void setMementoCreatedDate(final Instant mementoCreatedDate) { 335 kernelHeaders.setMementoCreatedDate(mementoCreatedDate); 336 storageHeaders.withMementoCreatedDate(mementoCreatedDate); 337 } 338 339 /** 340 * @param externalUrl the externalUrl to set 341 */ 342 public void setExternalUrl(final String externalUrl) { 343 kernelHeaders.setExternalUrl(externalUrl); 344 storageHeaders.withExternalUrl(externalUrl); 345 } 346 347 @Override 348 public String getExternalUrl() { 349 return kernelHeaders.getExternalUrl(); 350 } 351 352 /** 353 * 354 * @param flag boolean flag 355 */ 356 public void setArchivalGroup(final boolean flag) { 357 kernelHeaders.setArchivalGroup(flag); 358 storageHeaders.withArchivalGroup(flag); 359 } 360 361 @Override 362 public boolean isArchivalGroup() { 363 return kernelHeaders.isArchivalGroup(); 364 } 365 366 /** 367 * @param flag boolean flag 368 */ 369 public void setObjectRoot(final boolean flag) { 370 kernelHeaders.setObjectRoot(flag); 371 storageHeaders.withObjectRoot(flag); 372 } 373 374 @Override 375 public boolean isObjectRoot() { 376 if (isArchivalGroup()) { 377 return true; 378 } else { 379 return kernelHeaders.isObjectRoot(); 380 } 381 } 382 383 /** 384 * Set deleted status flag. 385 * @param deleted true if deleted (a tombstone). 386 */ 387 public void setDeleted(final boolean deleted) { 388 kernelHeaders.setDeleted(deleted); 389 storageHeaders.withDeleted(deleted); 390 } 391 392 /** 393 * {@inheritDoc} 394 */ 395 @Override 396 public boolean isDeleted() { 397 return kernelHeaders.isDeleted(); 398 } 399 400 /** 401 * {@inheritDoc} 402 */ 403 @Override 404 public String getContentPath() { 405 return kernelHeaders.getContentPath(); 406 } 407 408 /** 409 * Sets the path to the content file associated with the header file 410 * 411 * @param contentPath path to content file 412 */ 413 public void setContentPath(final String contentPath) { 414 kernelHeaders.setContentPath(contentPath); 415 storageHeaders.withContentPath(contentPath); 416 } 417 418 @Override 419 public String getHeadersVersion() { 420 return kernelHeaders.getHeadersVersion(); 421 } 422 423 /** 424 * @param headersVersion the headers version to set 425 */ 426 public void setHeadersVersion(final String headersVersion) { 427 kernelHeaders.setHeadersVersion(headersVersion); 428 storageHeaders.withHeadersVersion(headersVersion); 429 } 430 431}