BagitProfile.java

/*
 * Copyright (C) 2023 DANS - Data Archiving and Networked Services (info@dans.knaw.nl)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package nl.knaw.dans.bagit.conformance.profile;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * POJO for all the bagit profile fields. 
 * A bagit profile is used to ensure the bag metadata contains all required elements and optional elements follow allowed values
 */
public class BagitProfile {
  private String bagitProfileIdentifier = "";
  private String sourceOrganization = "";
  private String externalDescription = "";
  private String contactName = "";
  private String contactEmail = "";
  private String contactPhone = "";
  private String version = "";
  
  private Map<String, BagInfoRequirement> bagInfoRequirements = new HashMap<>();
  private List<String> manifestTypesRequired = new ArrayList<>();
  private boolean fetchFileAllowed; //defaults to false
  private Serialization serialization = Serialization.optional;
  private List<String> acceptableMIMESerializationTypes = new ArrayList<>();
  private List<String> acceptableBagitVersions = new ArrayList<>();
  private List<String> tagManifestTypesRequired = new ArrayList<>();
  private List<String> tagFilesRequired = new ArrayList<>();
  
  
  @Override
  public boolean equals(final Object other) {
    if (!(other instanceof BagitProfile)) {
      return false;
    }
    final BagitProfile castOther = (BagitProfile) other;
    return Objects.equals(bagitProfileIdentifier, castOther.bagitProfileIdentifier)
        && Objects.equals(sourceOrganization, castOther.sourceOrganization)
        && Objects.equals(externalDescription, castOther.externalDescription)
        && Objects.equals(contactName, castOther.contactName) && Objects.equals(contactEmail, castOther.contactEmail)
        && Objects.equals(contactPhone, castOther.contactPhone)
        && Objects.equals(version, castOther.version)
        && Objects.equals(bagInfoRequirements, castOther.bagInfoRequirements)
        && Objects.equals(manifestTypesRequired, castOther.manifestTypesRequired)
        && Objects.equals(fetchFileAllowed, castOther.fetchFileAllowed)
        && Objects.equals(serialization, castOther.serialization)
        && Objects.equals(acceptableMIMESerializationTypes, castOther.acceptableMIMESerializationTypes)
        && Objects.equals(acceptableBagitVersions, castOther.acceptableBagitVersions)
        && Objects.equals(tagManifestTypesRequired, castOther.tagManifestTypesRequired)
        && Objects.equals(tagFilesRequired, castOther.tagFilesRequired);
  }
  @Override
  public int hashCode() {
    return Objects.hash(bagitProfileIdentifier, sourceOrganization, externalDescription, contactName, contactEmail, contactPhone, version, bagInfoRequirements, manifestTypesRequired, fetchFileAllowed, serialization,
        acceptableMIMESerializationTypes, acceptableBagitVersions, tagManifestTypesRequired, tagFilesRequired);
  }
  @Override
  public String toString() {
    return "BagitProfile [bagitProfileIdentifier=" + bagitProfileIdentifier + ", sourceOrganization="
        + sourceOrganization + ", externalDescription=" + externalDescription + ", contactName=" + contactName
        + ", contactEmail=" + contactEmail + ", contactPhone=" + contactPhone + ", version=" + version + ", bagInfoRequirements=" + bagInfoRequirements
        + ", manifestTypesRequired=" + manifestTypesRequired + ", fetchFileAllowed=" + fetchFileAllowed
        + ", serialization=" + serialization + ", acceptableMIMESerializationTypes=" + acceptableMIMESerializationTypes
        + ", acceptableBagitVersions=" + acceptableBagitVersions + ", tagManifestTypesRequired="
        + tagManifestTypesRequired + ", tagFilesRequired=" + tagFilesRequired + "]";
  }
  
  public Map<String,BagInfoRequirement> getBagInfoRequirements() {
    return bagInfoRequirements;
  }
  public void setBagInfoRequirements(final Map<String, BagInfoRequirement> bagInfo) {
    this.bagInfoRequirements = bagInfo;
  }
  public List<String> getManifestTypesRequired() {
    return manifestTypesRequired;
  }
  public void setManifestTypesRequired(final List<String> manifestsRequired) {
    this.manifestTypesRequired = manifestsRequired;
  }
  public boolean isFetchFileAllowed() {
    return fetchFileAllowed;
  }
  public void setFetchFileAllowed(final boolean allowFetchFile) {
    this.fetchFileAllowed = allowFetchFile;
  }
  public Serialization getSerialization() {
    return serialization;
  }
  public void setSerialization(final Serialization serialization) {
    this.serialization = serialization;
  }
  public List<String> getAcceptableMIMESerializationTypes() {
    return acceptableMIMESerializationTypes;
  }
  public void setAcceptableMIMESerializationTypes(final List<String> acceptSerialization) {
    this.acceptableMIMESerializationTypes = acceptSerialization;
  }
  public List<String> getAcceptableBagitVersions() {
    return acceptableBagitVersions;
  }
  public void setAcceptableBagitVersions(final List<String> acceptBagitVersion) {
    this.acceptableBagitVersions = acceptBagitVersion;
  }
  public List<String> getTagManifestTypesRequired() {
    return tagManifestTypesRequired;
  }
  public void setTagManifestTypesRequired(final List<String> tagManifestsRequired) {
    this.tagManifestTypesRequired = tagManifestsRequired;
  }
  public List<String> getTagFilesRequired() {
    return tagFilesRequired;
  }
  public void setTagFilesRequired(final List<String> tagFilesRequired) {
    this.tagFilesRequired = tagFilesRequired;
  }
  public String getBagitProfileIdentifier() {
    return bagitProfileIdentifier;
  }
  public void setBagitProfileIdentifier(final String bagitProfileIdentifier) {
    this.bagitProfileIdentifier = bagitProfileIdentifier;
  }
  public String getSourceOrganization() {
    return sourceOrganization;
  }
  public void setSourceOrganization(final String sourceOrganization) {
    this.sourceOrganization = sourceOrganization;
  }
  public String getExternalDescription() {
    return externalDescription;
  }
  public void setExternalDescription(final String externalDescription) {
    this.externalDescription = externalDescription;
  }
  public String getContactName() {
    return contactName;
  }
  public void setContactName(final String contactName) {
    this.contactName = contactName;
  }
  public String getContactEmail() {
    return contactEmail;
  }
  public void setContactEmail(final String contactEmail) {
    this.contactEmail = contactEmail;
  }
  public String getContactPhone() {
    return contactPhone;
  }
  public void setContactPhone(final String contactPhone) {
    this.contactPhone = contactPhone;
  }
  public String getVersion() {
    return version;
  }
  public void setVersion(final String version) {
    this.version = version;
  }
}