public void toHeader()

in modules/core/src/main/java/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java [192:289]


	public void toHeader(SOAPHeader header) throws SandeshaException{
		SOAPHeaderBlock sequenceAcknowledgementHeaderBlock = header.addHeaderBlock(
				Sandesha2Constants.WSRM_COMMON.SEQUENCE_ACK,omNamespace);
		
		if (identifier == null)
			throw new OMException(
					SandeshaMessageHelper.getMessage(
							SandeshaMessageKeys.invalidIdentifier,
							header.toString()));

		// SequenceACK messages should always have the MustUnderstand flag set to true
		// Unless it is a piggybacked ack
		if(piggybacked){
			sequenceAcknowledgementHeaderBlock.setMustUnderstand(false);
		} else {
			sequenceAcknowledgementHeaderBlock.setMustUnderstand(true);
		}
		
		identifier.toOMElement(sequenceAcknowledgementHeaderBlock, omNamespace);

		Iterator<Range> ackRangeIt = acknowledgementRangeList.iterator();
		while (ackRangeIt.hasNext()) {
			Range ackRange = (Range) ackRangeIt.next();
			
			if (ackRange.upperValue <= 0 || ackRange.lowerValue <= 0 || ackRange.lowerValue > ackRange.upperValue)
				throw new OMException(
						SandeshaMessageHelper.getMessage(
								SandeshaMessageKeys.ackRandDoesNotHaveCorrectValues,
								ackRange.upperValue + ":" + ackRange.lowerValue));

			OMFactory factory = sequenceAcknowledgementHeaderBlock.getOMFactory();
			
			OMAttribute lowerAttrib = factory.createOMAttribute(
					Sandesha2Constants.WSRM_COMMON.LOWER, null, Long.toString(ackRange.lowerValue));
			OMAttribute upperAttrib = factory.createOMAttribute(
					Sandesha2Constants.WSRM_COMMON.UPPER, null, Long.toString(ackRange.upperValue));

			OMElement acknowledgementRangeElement = factory.createOMElement(Sandesha2Constants.WSRM_COMMON.ACK_RANGE, omNamespace);
			
			acknowledgementRangeElement.addAttribute(lowerAttrib);
			acknowledgementRangeElement.addAttribute(upperAttrib);
			sequenceAcknowledgementHeaderBlock.addChild(acknowledgementRangeElement);
		}

		Iterator<Long> nackIt = nackList.iterator();
		while (nackIt.hasNext()) {
			Long nack = (Long) nackIt.next();
			
			if (nack.longValue()<=0)
				throw new OMException (SandeshaMessageHelper.getMessage(
						SandeshaMessageKeys.nackDoesNotContainValidLongValue));
						
			OMElement nackElement = sequenceAcknowledgementHeaderBlock.getOMFactory().createOMElement(Sandesha2Constants.WSRM_COMMON.NACK,omNamespace);
			nackElement.setText(nack.toString());
			sequenceAcknowledgementHeaderBlock.addChild(nackElement);
		}
		
		String rmSpecVersion = SpecSpecificConstants.getSpecVersionString(namespaceValue);

		//setting a 'None' when nothing is there (for the correct RM version)
		if (ackNone==false && acknowledgementRangeList.size()==0 && nackList.size()==0 && SpecSpecificConstants.isAckNoneAllowed(rmSpecVersion)) {
			ackNone = true;
		}
		
		if (ackNone!=false) {
			if (!SpecSpecificConstants.isAckNoneAllowed(rmSpecVersion)) {
				throw new SandeshaException (SandeshaMessageHelper.getMessage(
						SandeshaMessageKeys.noneNotAllowedNamespace,
						rmSpecVersion));
			}
			
			if (acknowledgementRangeList.size()>0) {
				throw new SandeshaException (SandeshaMessageHelper.getMessage(
						SandeshaMessageKeys.noneNotAllowedAckRangesPresent));
			}
			
			if (nackList.size()>0) {
				throw new SandeshaException (SandeshaMessageHelper.getMessage(
						SandeshaMessageKeys.noneNotAllowedNackPresent));
			}
			OMElement noneElement = sequenceAcknowledgementHeaderBlock.getOMFactory().createOMElement(Sandesha2Constants.WSRM_COMMON.NONE, omNamespace);
			sequenceAcknowledgementHeaderBlock.addChild(noneElement);
		}
		
		if (ackFinal!=false) {
			if (!SpecSpecificConstants.isAckFinalAllowed(rmSpecVersion)) {
				throw new SandeshaException (SandeshaMessageHelper.getMessage(
						SandeshaMessageKeys.finalNotAllowedNamespace));
			}
			
			if (nackList.size()>0) {
				throw new SandeshaException (SandeshaMessageHelper.getMessage(
						SandeshaMessageKeys.cannotHaveFinalWithNack));
			}
			OMElement finalElement = sequenceAcknowledgementHeaderBlock.getOMFactory().createOMElement(Sandesha2Constants.WSRM_COMMON.FINAL, omNamespace);
			sequenceAcknowledgementHeaderBlock.addChild(finalElement);
		}
	}