/**
 * JHOVE2 - Next-generation architecture for format-aware characterization
 * 
 * Copyright (c) 2009 by The Regents of the University of California, Ithaka
 * Harbors, Inc., and The Board of Trustees of the Leland Stanford Junior
 * University. All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * 
 * o Redistributions of source code must retain the above copyright notice, this
 * list of conditions and the following disclaimer.
 * 
 * o Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 * 
 * o Neither the name of the University of California/California Digital
 * Library, Ithaka Harbors/Portico, or Stanford University, nor the names of its
 * contributors may be used to endorse or promote products derived from this
 * software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package org.jhove2.module.format.tiff.profile;

import org.jhove2.core.JHOVE2;
import org.jhove2.core.JHOVE2Exception;
import org.jhove2.core.Message;
import org.jhove2.core.Message.Context;
import org.jhove2.core.Message.Severity;
import org.jhove2.core.format.Format;
import org.jhove2.module.format.tiff.TiffIFD;

/**
 * @author MStrong
 * 
 */
public class TiffDLFColorProfile extends TiffDLFProfile {

    /** Profile version identifier. */
    public static final String VERSION = "2.0.0";

    /** Profile release date. */
    public static final String RELEASE = "2010-09-10";

    /** Profile rights statement. */
    public static final String RIGHTS = "Copyright 2010 by The Regents of the University of California. "
            + "Available under the terms of the BSD license.";

    /** Profile validation coverage. */
    public static final Coverage COVERAGE = Coverage.Inclusive;

    public TiffDLFColorProfile(Format format) {
        super(format);
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.jhove2.module.format.tiff.profile.TiffProfile#validateThisProfile()
     */
    @Override
    public void validateThisProfile(JHOVE2 jhove2, TiffIFD ifd)
            throws JHOVE2Exception {

        /* Check required values. */

        if (!isCompressionValid(ifd, new int[] { 1, 5, 32773 })) {
            this.isValid = Validity.False;
            this.invalidCompressionValueMessage = new Message(
                    Severity.WARNING,
                    Context.OBJECT,
                    "org.jhove2.module.format.tiff.profile.TIFFProfile.InvalidCompressionValueMessage",
                    jhove2.getConfigInfo());
        }

        if (!isPhotometricInterpretationValid(ifd, new int[] { 2, 6 })) {
            this.isValid = Validity.False;
            this.invalidPhotometricInterpretationValueMessage = new Message(
                    Severity.WARNING,
                    Context.OBJECT,
                    "org.jhove2.module.format.tiff.profile.TIFFProfile.InvalidPhotometricInterpretationValueMessage",
                    jhove2.getConfigInfo());
        }

        if (!isSamplesPerPixelValid(ifd, 3)) {
            this.isValid = Validity.False;
            this.invalidSPPValueMessage = new Message(
                    Severity.WARNING,
                    Context.OBJECT,
                    "org.jhove2.module.format.tiff.profile.TIFFProfile.InvalidSPPValueMessage",
                    jhove2.getConfigInfo());
        }

        int[] bps = ifd.getBitsPerSample();
        for (int i = 0; i < bps.length; i++) {
            if (bps[i] != 8) {
                this.isValid = Validity.False;
                this.invalidBPSValueMessage = new Message(
                        Severity.WARNING,
                        Context.OBJECT,
                        "org.jhove2.module.format.tiff.profile.TIFFProfile.InvalidBPSValueMessage",
                        jhove2.getConfigInfo());
            }
        }

        /* XResolution and YResolution >= 300 (in) or 760 (cm) */
        if (!hasMinimumResolution(ifd, 300.0, 760.0)) {
            this.isValid = Validity.False;
            this.minimumResolutionValueInvalidMessage = new Message(
                    Severity.WARNING,
                    Context.OBJECT,
                    "org.jhove2.module.format.tiff.profile.TIFFDLFProfile.MinimumResolutionValueInvalidMessage",
                    jhove2.getConfigInfo());
        }
    }
}

@@ -2652,20 +2652,16 @@
         
-    
 + %22Avail
@@ -3117,24 +3117,16 @@
 D ifd)%0D%0A
-        
     thro
@@ -4477,24 +4477,402 @@
 rSample();%0D%0A
+        if (bps == null) %7B%0D%0A            this.isValid = Validity.False;%0D%0A            this.invalidBPSValueMessage = new Message(%0D%0A                    Severity.WARNING,%0D%0A                    Context.OBJECT,%0D%0A                    %22org.jhove2.module.format.tiff.profile.TIFFProfile.InvalidBPSValueMessage%22,%0D%0A                    jhove2.getConfigInfo());%0D%0A        %7D%0D%0A        else %7B%0D%0A    
         for 
@@ -4915,24 +4915,28 @@
             
+    
 if (bps%5Bi%5D !
@@ -4939,24 +4939,28 @@
 i%5D != 8) %7B%0D%0A
+    
             
@@ -5003,32 +5003,36 @@
                 
+    
 this.invalidBPSV
@@ -5075,32 +5075,36 @@
                 
+   
+ 
 Severity.WARNING
@@ -5122,32 +5122,36 @@
                 
+    
 Context.OBJECT,%0D
@@ -5167,32 +5167,36 @@
                 
+ 
+   
 %22org.jhove2.modu
@@ -5272,32 +5272,36 @@
                 
+    
 jhove2.getConfig
@@ -5302,32 +5302,51 @@
 ConfigInfo());%0D%0A
+                %7D%0D%0A
             %7D%0D%0A 

fix bug in TiffDLFColorProfile which caused NullPointerException