001/**
002 * Copyright 2015 DuraSpace, Inc.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.fcrepo.kernel.utils;
017
018import javax.jcr.RepositoryException;
019import java.net.URI;
020import java.util.Set;
021
022/**
023 * @author bbpennel
024 * @since Feb 18, 2014
025 */
026public interface FixityResult {
027
028    /**
029     * The possible fixity states (which may be ORed together later)
030     */
031    public static enum FixityState {
032        SUCCESS, BAD_CHECKSUM, BAD_SIZE
033    }
034
035    /**
036     * Get the identifier for the entry's store
037     * @return String
038     */
039    String getStoreIdentifier() throws RepositoryException;
040
041    /**
042     * Check if the fixity result matches the given checksum URI
043     *
044     * @param checksum
045     * @return fixity result matches the given checksum URI
046     */
047    boolean matches(URI checksum);
048
049    /**
050     * Check if the fixity result matches the given size
051     *
052     * @param size
053     * @return fixity result matches the given size
054     */
055    boolean matches(long size);
056
057    /**
058     * Does the fixity entry match the given size and checksum?
059     *
060     * @param size bitstream size in bytes
061     * @param checksum checksum URI
062     * @return true if both conditions matched
063     */
064    boolean matches(long size, URI checksum);
065
066    /**
067     * @return the status
068     */
069    Set<FixityState> getStatus(long size, URI checksum);
070
071    /**
072     * @return the computed size
073     */
074    long getComputedSize();
075
076    /**
077     * @return the computed checksum
078     */
079    URI getComputedChecksum();
080
081}