package at.gv.egovernment.moa.spss.api.impl;
import java.io.InputStream;
import at.gv.egovernment.moa.spss.MOARuntimeException;
import at.gv.egovernment.moa.spss.api.common.Content;
import at.gv.egovernment.moa.spss.api.common.ContentBinary;
import at.gv.egovernment.moa.spss.api.common.InputData;
/**
 * Content wrapper decorating a binary content with two additional attributes 
 * needed for returning HashInputData and ReferenceInputData
 *  information as part of VerifyXMLSignatureResponse.
 * 
 * @author Gregor Karlinger
 * 
 * @version $Id$
 */
public class InputDataBinaryImpl implements ContentBinary, InputData
{
  /**
   * The wrapped Content.
   */
  protected ContentBinary wrapped_;
  
  /**
   * This attribute signals what kind of container the XMLDSIG Reference
   * this InputData belongs to is part of. 
   */
  protected String partOf_;
  
  /**
   * If this InputData belongs to an XMLDSIG Reference
   * being part of either a XMLDSIGManifest or a SignatureManifest, this attribute
   * (a positive int) signals the particular Reference of the XMLDSIG 
   * SignedInfo referring to the XMLDSIGManifest or SignatureManifest
   * respectively.
   */
  protected int referringReferenceNumber_;
  
  /**
   * Creates a new instance.
   * 
   * @param wrapped The wrapped Content. Must be of type {@link Content#BINARY_CONTENT}.
   * 
   * @param partOf see {@link InputData}
   * 
   * @param referringReferenceNumber see {@link InputData}
   */
  public InputDataBinaryImpl(Content wrapped, String partOf, int referringReferenceNumber) throws MOARuntimeException
  {
    if (wrapped.getContentType() != Content.BINARY_CONTENT) throw new MOARuntimeException("9901", null);
    
    wrapped_ = (ContentBinary) wrapped;
    partOf_ =  partOf;
    referringReferenceNumber_ = referringReferenceNumber;
  }
  
  /** 
   * @see at.gv.egovernment.moa.spss.api.common.Content#getContentType()
   */
  public int getContentType()
  {
    return wrapped_.getContentType();
  }
  /**
   * @see at.gv.egovernment.moa.spss.api.common.Content#getReference()
   */
  public String getReference()
  {
    return wrapped_.getReference();
  }
  /**
   * @see at.gv.egovernment.moa.spss.api.common.ContentBinary#getBinaryContent()
   */
  public InputStream getBinaryContent()
  {
    return wrapped_.getBinaryContent();
  }
  /**
   * @see at.gv.egovernment.moa.spss.api.common.InputData#getPartOf()
   */
  public String getPartOf()
  {
    return partOf_;
  }
  /**
   * @see at.gv.egovernment.moa.spss.api.common.InputData#getReferringReferenceNumber()
   */
  public int getReferringReferenceNumber()
  {
    return referringReferenceNumber_;
  }
}