package org.jentrata.ebms.cpa; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import org.jentrata.ebms.EbmsConstants; import org.jentrata.ebms.MessageType; import org.jentrata.ebms.cpa.pmode.BusinessInfo; import org.jentrata.ebms.cpa.pmode.Party; import org.jentrata.ebms.cpa.pmode.PayloadService; import org.jentrata.ebms.cpa.pmode.Protocol; import org.jentrata.ebms.cpa.pmode.ReceptionAwareness; import org.jentrata.ebms.cpa.pmode.Security; import org.jentrata.ebms.cpa.pmode.Service; /** * A Agreement between 2 trading partners * * @author aaronwalker */ public class PartnerAgreement { private String cpaId; private boolean active = true; private String agreementRef; private String mep = EbmsConstants.EBMS_V3_MEP_ONE_WAY; private String mepBinding = EbmsConstants.EBMS_V3_MEP_BINDING_PUSH; private Party initiator; private Party responder; private Protocol protocol; private BusinessInfo businessInfo = BusinessInfo.DEFAULT; private Security security = Security.DEFAULT_SECURITY; private ReceptionAwareness receptionAwareness = ReceptionAwareness.DEFAULT; public String getCpaId() { return cpaId; } public void setCpaId(String cpaId) { this.cpaId = cpaId; } public boolean isActive() { return active; } public void setActive(boolean active) { this.active = active; } public String getAgreementRef() { return agreementRef; } public void setAgreementRef(String agreementRef) { this.agreementRef = agreementRef; } public String getMep() { return mep; } public void setMep(String mep) { this.mep = mep; } public String getMepBinding() { return mepBinding; } public void setMepBinding(String mepBinding) { this.mepBinding = mepBinding; } public Party getInitiator() { return initiator; } public void setInitiator(Party initiator) { this.initiator = initiator; } public Party getResponder() { return responder; } public void setResponder(Party responder) { this.responder = responder; } public Protocol getProtocol() { return protocol; } public void setProtocol(Protocol protocol) { this.protocol = protocol; } public BusinessInfo getBusinessInfo() { return businessInfo; } public void setBusinessInfo(BusinessInfo businessInfo) { this.businessInfo = businessInfo; } public boolean hasService(final String serviceName, final String action) { Iterable<Service> s = Iterables.filter(businessInfo.getServices(), new Predicate<Service>() { @Override public boolean apply(Service service) { return service.getService().equals(serviceName) && service.getAction().equals(action); } }); return s.iterator().hasNext(); } public Service getService(String serviceName, String action) { for(Service service : businessInfo.getServices()) { if(service.getService().equals(serviceName) && service.getAction().equals(action)) { return service; } } return null; } public PayloadService getPayloadProfile(String payloadId) { if(businessInfo != null && businessInfo.getPayloadProfile() != null) { for(PayloadService payload : businessInfo.getPayloadProfile()) { if(payload.getPayloadId().equals(payloadId)) { return payload; } } } return PayloadService.DEFAULT_PAYLOAD_SERVICE; } public Security getSecurity() { return security; } public void setSecurity(Security security) { this.security = security; } public ReceptionAwareness getReceptionAwareness() { return receptionAwareness; } public void setReceptionAwareness(ReceptionAwareness receptionAwareness) { this.receptionAwareness = receptionAwareness; } public boolean hasResponderSecurityToken() { return responder != null && responder.getAuthorization() != null; } public boolean hasInitiatorSecurityToken() { return initiator != null && initiator.getAuthorization() != null; } public boolean requiresSignature(MessageType messageType) { if(security != null && security.getSignature() != null) { switch (messageType) { case SIGNAL_MESSAGE: return security.isSendReceiptNonRepudiation(); case SIGNAL_MESSAGE_ERROR: return false; default: return true; } } return false; } }