Skip to content

Commit

Permalink
added CanReceive support to CPA import (#13)
Browse files Browse the repository at this point in the history
  • Loading branch information
EdwinVDS authored and aaronwalker committed Dec 15, 2016
1 parent 571120e commit d3f33cf
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 67 deletions.
Expand Up @@ -90,8 +90,8 @@ public void setThisPartyActionBinding(ActionBindingType value) {
* {@link Object }
*
*/
public Object getOtherPartyActionBinding() {
return otherPartyActionBinding;
public ActionBindingType getOtherPartyActionBinding() {
return (ActionBindingType) otherPartyActionBinding;
}

/**
Expand Down
Expand Up @@ -160,80 +160,104 @@ private CollaborationProtocolAgreement parseCPA(InputStream stream) {

private List<PartnershipDVO> addPartnerships(CollaborationProtocolAgreement cpa, PartyInfo partyInfo, FileItem verificationCert, FileItem encryptionCert) throws Exception {
List<PartnershipDVO> partnerships = new ArrayList<PartnershipDVO>();
List<PartnershipDVO> rv = new ArrayList<PartnershipDVO>();
PartnershipDAO partnershipDAO = (PartnershipDAO) EbmsProcessor.core.dao.createDAO(PartnershipDAO.class);

for(CollaborationRole collaborationRole : partyInfo.getCollaborationRole()) {
String serviceName = collaborationRole.getServiceBinding().getService().getValue();

// create partnerships where the selected party is a sender
for(CanSend canSend : collaborationRole.getServiceBinding().getCanSend()) {
PartnershipDAO partnershipDAO = (PartnershipDAO) EbmsProcessor.core.dao.createDAO(PartnershipDAO.class);
PartnershipDVO partnershipDVO = (PartnershipDVO) partnershipDAO.createDVO();

String action = canSend.getThisPartyActionBinding().getAction();
DeliveryChannel channel = canSend.getOtherPartyActionBinding().getChannel();
partnershipDVO.setPartnershipId(cpa.getCpaid() + "," + channel.getChannelId() + "," + action);
partnershipDVO.setCpaId(cpa.getCpaid());
partnershipDVO.setService(serviceName);
partnershipDVO.setAction(action);
partnershipDVO.setDisabled("false");
partnershipDVO.setIsHostnameVerified("false");

//Agreement Messaging Characteristic
partnershipDVO.setActor(channel.getMessagingCharacteristics().getActor().value());
partnershipDVO.setAckRequested(channel.getMessagingCharacteristics().getAckRequested().value());
partnershipDVO.setAckSignRequested(channel.getMessagingCharacteristics().getAckSignatureRequested().value());
partnershipDVO.setDupElimination(channel.getMessagingCharacteristics().getDuplicateElimination().value());
partnershipDVO.setSyncReplyMode(channel.getMessagingCharacteristics().getSyncReplyMode().value());

//Agreement Transport
partnershipDVO.setTransportProtocol(channel.getTransport().getTransportReceiver().getTransportProtocol().getValue());
partnershipDVO.setTransportEndpoint(channel.getTransport().getTransportReceiver().getEndpoint().get(0).getUri());

//Agreement DocExchange
partnershipDVO.setMessageOrder(channel.getDocExchange().getEbXMLSenderBinding().getReliableMessaging().getMessageOrderSemantics().value());
partnershipDVO.setPersistDuration(channel.getDocExchange().getEbXMLSenderBinding().getPersistDuration().toString());
partnershipDVO.setRetryInterval((int) channel.getDocExchange().getEbXMLSenderBinding().getReliableMessaging().getRetryInterval().getTimeInMillis(new Date()));
partnershipDVO.setRetries(channel.getDocExchange().getEbXMLSenderBinding().getReliableMessaging().getRetries().intValue());

//Digital Signature & Encryption
partnershipDVO.setSignRequested(String.valueOf(canSend.getOtherPartyActionBinding().getBusinessTransactionCharacteristics().isIsNonRepudiationRequired()));
partnershipDVO.setEncryptRequested("false");
if(channel.getDocExchange().getEbXMLSenderBinding().getSenderNonRepudiation() != null) {
partnershipDVO.setDsAlgorithm(channel.getDocExchange().getEbXMLSenderBinding().getSenderNonRepudiation().getSignatureAlgorithm().get(0).getValue());
partnershipDVO.setMdAlgorithm(channel.getDocExchange().getEbXMLSenderBinding().getSenderNonRepudiation().getHashFunction());
if(verificationCert != null) {
partnershipDVO.setSignCert(loadCert(verificationCert));
} else {
partnershipDVO.setSignCert(null);
}
}
ActionBindingType senderActionBinding = canSend.getThisPartyActionBinding();
ActionBindingType receiverActionBinding = canSend.getOtherPartyActionBinding();
DeliveryChannel channel = receiverActionBinding.getChannel();
partnerships.add( createPartnership(cpa, channel, senderActionBinding, receiverActionBinding, verificationCert, encryptionCert, partnerships, serviceName));
}

if(channel.getDocExchange().getEbXMLSenderBinding().getSenderDigitalEnvelope() != null) {
String digitalEnvelopeProtocol = channel.getDocExchange().getEbXMLSenderBinding().getSenderDigitalEnvelope().getDigitalEnvelopeProtocol().getValue();
String encryptionAlgorithm = channel.getDocExchange().getEbXMLSenderBinding().getSenderDigitalEnvelope().getEncryptionAlgorithm().get(0).getValue();
if (encryptionAlgorithm != null) {
if (encryptionAlgorithm.toLowerCase().contains("rc2")) {
encryptionAlgorithm = SMimeMessage.ENCRYPT_ALG_RC2_CBC;
} else {
encryptionAlgorithm = SMimeMessage.ENCRYPT_ALG_DES_EDE3_CBC;
}
}
partnershipDVO.setEncryptRequested("true");
partnershipDVO.setEncryptAlgorithm(encryptionAlgorithm);
if(encryptionCert != null) {
partnershipDVO.setSignCert(loadCert(encryptionCert));
} else {
partnershipDVO.setEncryptCert(null);
}
}
// create partnerships where the selected party is a receiver
for(CanReceive canReceive: collaborationRole.getServiceBinding().getCanReceive()) {
ActionBindingType receiverActionBinding= canReceive.getThisPartyActionBinding();
ActionBindingType senderActionBinding = canReceive.getOtherPartyActionBinding();
DeliveryChannel channel = receiverActionBinding.getChannel();
partnerships.add( createPartnership(cpa, channel, senderActionBinding, receiverActionBinding, verificationCert, encryptionCert, partnerships, serviceName));
}
}

// insert partnerships not found in DB.
for (PartnershipDVO dvo: partnerships) {
if (!partnershipDAO.retrieve(dvo)) {
EbmsProcessor.core.log.info("Adding Partnership " + dvo.getPartnershipId());
partnershipDAO.create(dvo);
rv.add(dvo);
} else {
EbmsProcessor.core.log.info("Partnership " + dvo.getPartnershipId() + " already exists");
}
}
// only return partnerships that were newly created. These will be displayed to the end-user.
return rv;
}

private PartnershipDVO createPartnership(CollaborationProtocolAgreement cpa, DeliveryChannel channel,ActionBindingType senderActionBinding, ActionBindingType receiverActionBinding, FileItem verificationCert, FileItem encryptionCert, List<PartnershipDVO> partnerships, String serviceName) throws DAOException, CertificateException, IOException {
PartnershipDAO partnershipDAO = (PartnershipDAO) EbmsProcessor.core.dao.createDAO(PartnershipDAO.class);
PartnershipDVO partnershipDVO = (PartnershipDVO) partnershipDAO.createDVO();

String action = senderActionBinding.getAction();

partnershipDVO.setPartnershipId(cpa.getCpaid() + "," + channel.getChannelId() + "," + action);
partnershipDVO.setCpaId(cpa.getCpaid());
partnershipDVO.setService(serviceName);
partnershipDVO.setAction(action);
partnershipDVO.setDisabled("false");
partnershipDVO.setIsHostnameVerified("false");

//Agreement Messaging Characteristic
partnershipDVO.setActor(channel.getMessagingCharacteristics().getActor().value());
partnershipDVO.setAckRequested(channel.getMessagingCharacteristics().getAckRequested().value());
partnershipDVO.setAckSignRequested(channel.getMessagingCharacteristics().getAckSignatureRequested().value());
partnershipDVO.setDupElimination(channel.getMessagingCharacteristics().getDuplicateElimination().value());
partnershipDVO.setSyncReplyMode(channel.getMessagingCharacteristics().getSyncReplyMode().value());

if(!partnershipDAO.retrieve(partnershipDVO)) {
EbmsProcessor.core.log.info("Adding Partnership " + partnershipDVO.getPartnershipId());
partnershipDAO.create(partnershipDVO);
partnerships.add(partnershipDVO);
//Agreement Transport
partnershipDVO.setTransportProtocol(channel.getTransport().getTransportReceiver().getTransportProtocol().getValue());
partnershipDVO.setTransportEndpoint(channel.getTransport().getTransportReceiver().getEndpoint().get(0).getUri());

//Agreement DocExchange
partnershipDVO.setMessageOrder(channel.getDocExchange().getEbXMLSenderBinding().getReliableMessaging().getMessageOrderSemantics().value());
partnershipDVO.setPersistDuration(channel.getDocExchange().getEbXMLSenderBinding().getPersistDuration().toString());
partnershipDVO.setRetryInterval((int) channel.getDocExchange().getEbXMLSenderBinding().getReliableMessaging().getRetryInterval().getTimeInMillis(new Date()));
partnershipDVO.setRetries(channel.getDocExchange().getEbXMLSenderBinding().getReliableMessaging().getRetries().intValue());

//Digital Signature & Encryption
partnershipDVO.setSignRequested(String.valueOf(receiverActionBinding.getBusinessTransactionCharacteristics().isIsNonRepudiationRequired()));
partnershipDVO.setEncryptRequested("false");
if(channel.getDocExchange().getEbXMLSenderBinding().getSenderNonRepudiation() != null) {
partnershipDVO.setDsAlgorithm(channel.getDocExchange().getEbXMLSenderBinding().getSenderNonRepudiation().getSignatureAlgorithm().get(0).getValue());
partnershipDVO.setMdAlgorithm(channel.getDocExchange().getEbXMLSenderBinding().getSenderNonRepudiation().getHashFunction());
if(verificationCert != null) {
partnershipDVO.setSignCert(loadCert(verificationCert));
} else {
partnershipDVO.setSignCert(null);
}
}

if(channel.getDocExchange().getEbXMLSenderBinding().getSenderDigitalEnvelope() != null) {
String encryptionAlgorithm = channel.getDocExchange().getEbXMLSenderBinding().getSenderDigitalEnvelope().getEncryptionAlgorithm().get(0).getValue();
if (encryptionAlgorithm != null) {
if (encryptionAlgorithm.toLowerCase().contains("rc2")) {
encryptionAlgorithm = SMimeMessage.ENCRYPT_ALG_RC2_CBC;
} else {
EbmsProcessor.core.log.info("Partnership " + partnershipDVO.getPartnershipId() + " already exists");
encryptionAlgorithm = SMimeMessage.ENCRYPT_ALG_DES_EDE3_CBC;
}
}
partnershipDVO.setEncryptRequested("true");
partnershipDVO.setEncryptAlgorithm(encryptionAlgorithm);
if(encryptionCert != null) {
partnershipDVO.setSignCert(loadCert(encryptionCert));
} else {
partnershipDVO.setEncryptCert(null);
}
}
return partnerships;
return partnershipDVO;
}

private void render(List<PartnershipDVO> partnerships, PropertyTree dom) {
Expand Down

0 comments on commit d3f33cf

Please sign in to comment.