no.difi.oxalis.sniffer.PeppolStandardBusinessHeader Maven / Gradle / Ivy
Show all versions of oxalis-document-sniffer Show documentation
/*
* Copyright 2010-2017 Norwegian Agency for Public Management and eGovernment (Difi)
*
* Licensed under the EUPL, Version 1.1 or – as soon they
* will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
*
* You may not use this work except in compliance with the Licence.
*
* You may obtain a copy of the Licence at:
*
* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
*
* Unless required by applicable law or agreed to in
* writing, software distributed under the Licence is
* distributed on an "AS IS" basis,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied.
* See the Licence for the specific language governing
* permissions and limitations under the Licence.
*/
package no.difi.oxalis.sniffer;
import no.difi.oxalis.sniffer.identifier.InstanceId;
import no.difi.oxalis.sniffer.identifier.PeppolDocumentTypeId;
import no.difi.vefa.peppol.common.model.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* Our representation of the SBDH (Standard Business Document Header), which makes us
* independent of the StandardBusinessDocumentHeader generated by JAXB. Furthermore
* the UN/CEFACT SBDH is kind of awkward to use as some of the elements of interest to us,
* are split into several fields.
*
* @author steinar
* @author thore
*/
public class PeppolStandardBusinessHeader {
/**
* Peppol Participant Identification for the recipient
*/
private ParticipantIdentifier recipientId;
/**
* Peppol Participant Identification for the sender
*/
private ParticipantIdentifier senderId;
/**
* The type of document to send
*/
private DocumentTypeIdentifier peppolDocumentTypeId;
/**
* The business process this document is a part of
*/
private ProcessIdentifier profileTypeIdentifier;
/**
* Represents the unique identity of the message envelope. It is not the same as the ID of the
* business message (such as the Invoice number). Nor is it the same as the transmission Message ID
* generated by the application sending the message (as defined in AS2).
*
* This messageId is not the same as the "AS2 Message-ID" or the "START message id", which really are
* unique "transmission id's" that should be unique for each transmission.
*
* //StandardBusinessDocumentHeader/DocumentIdentification/InstanceIdentifier
*/
private InstanceId instanceId;
private Date creationDateAndTime;
/**
* Set the time to current and makes a random TransmissionIdentifier as default
*/
public static PeppolStandardBusinessHeader createPeppolStandardBusinessHeaderWithNewDate() {
PeppolStandardBusinessHeader p = new PeppolStandardBusinessHeader();
p.setCreationDateAndTime(new Date());
return p;
}
/**
* Empty constructor, no defaults - all must be supplied by user
*/
public PeppolStandardBusinessHeader() {
/* intentionally nothing */
}
public PeppolStandardBusinessHeader(Header header) {
senderId = header.getSender();
recipientId = header.getReceiver();
creationDateAndTime = header.getCreationTimestamp();
peppolDocumentTypeId = header.getDocumentType();
profileTypeIdentifier = header.getProcess();
instanceId = new InstanceId(header.getIdentifier().getValue());
}
/**
* Copy constructor
*/
public PeppolStandardBusinessHeader(PeppolStandardBusinessHeader peppolStandardBusinessHeader) {
recipientId = peppolStandardBusinessHeader.getRecipientId();
senderId = peppolStandardBusinessHeader.getSenderId();
peppolDocumentTypeId = peppolStandardBusinessHeader.getDocumentTypeIdentifier();
profileTypeIdentifier = peppolStandardBusinessHeader.getProfileTypeIdentifier();
instanceId = peppolStandardBusinessHeader.getInstanceId();
creationDateAndTime = peppolStandardBusinessHeader.getCreationDateAndTime();
}
/**
* Do we have enough transport details to send the message?
*
* @return true if transport details are complete.
*/
public boolean isComplete() {
return ((recipientId != null) &&
(senderId != null) &&
(peppolDocumentTypeId != null) &&
(profileTypeIdentifier != null) &&
(instanceId != null) &&
(creationDateAndTime != null));
}
/**
* Returns a list of property names that are still missing.
*
* @return empty list if headers are complete
*/
public List listMissingProperties() {
List mhf = new ArrayList<>();
if (recipientId == null) mhf.add("recipientId");
if (senderId == null) mhf.add("senderId");
if (peppolDocumentTypeId == null) mhf.add("peppolDocumentTypeId");
if (profileTypeIdentifier == null) mhf.add("profileTypeIdentifier");
if (instanceId == null) mhf.add("messageId");
if (creationDateAndTime == null) mhf.add("creationDateAndTime");
return mhf;
}
public void setRecipientId(ParticipantIdentifier recipientId) {
this.recipientId = recipientId;
}
public ParticipantIdentifier getRecipientId() {
return recipientId;
}
public void setSenderId(ParticipantIdentifier senderId) {
this.senderId = senderId;
}
public ParticipantIdentifier getSenderId() {
return senderId;
}
public void setInstanceId(InstanceId instanceId) {
this.instanceId = instanceId;
}
public InstanceId getInstanceId() {
return instanceId;
}
public void setCreationDateAndTime(Date creationDateAndTime) {
this.creationDateAndTime = creationDateAndTime;
}
public Date getCreationDateAndTime() {
return creationDateAndTime;
}
@Deprecated
public void setDocumentTypeIdentifier(PeppolDocumentTypeId documentTypeIdentifier) {
setDocumentTypeIdentifier(documentTypeIdentifier.toVefa());
}
public void setDocumentTypeIdentifier(DocumentTypeIdentifier documentTypeIdentifier) {
this.peppolDocumentTypeId = documentTypeIdentifier;
}
public DocumentTypeIdentifier getDocumentTypeIdentifier() {
return peppolDocumentTypeId;
}
public void setProfileTypeIdentifier(ProcessIdentifier processIdentifier) {
this.profileTypeIdentifier = processIdentifier;
}
public ProcessIdentifier getProfileTypeIdentifier() {
return profileTypeIdentifier;
}
public Header toVefa() {
PeppolDocumentTypeId documentTypeId = PeppolDocumentTypeId.valueOf(peppolDocumentTypeId.getIdentifier());
return Header.of(
senderId,
recipientId,
profileTypeIdentifier,
peppolDocumentTypeId,
instanceId == null ? InstanceIdentifier.generateUUID() : instanceId.toVefa(),
InstanceType.of(
"UBL",
documentTypeId.getLocalName(),
documentTypeId.getVersion()
),
creationDateAndTime
);
}
}