//$Header: /cvsroot-fuse/mec-as2/39/mendelson/comm/as2/message/AS2MessageInfo.java,v 1.1 2012/04/18 14:10:30 heller Exp $
package de.mendelson.comm.as2.message;
import de.mendelson.comm.as2.AS2ServerVersion;
import java.util.Date;
import java.util.Properties;
/*
* Copyright (C) mendelson-e-commerce GmbH Berlin Germany
*
* This software is subject to the license agreement set forth in the license.
* Please read and agree to all terms before using this software.
* Other product and brand names are trademarks of their respective owners.
*/
/**
* Stores all information about a as2 message
* @author S.Heller
* @version $Revision: 1.1 $
*/
public class AS2MessageInfo implements AS2Info {
public static final int DIRECTION_UNKNOWN = 0;
public static final int DIRECTION_IN = 1;
public static final int DIRECTION_OUT = 2;
private String senderId;
private String receiverId;
/**Date of this message*/
private Date initDate = new Date();
private String messageId;
private String senderEMail;
/**Stores the sender host for a message
*/
private String senderHost = null;
/**Raw data file*/
private String rawFilename = null;
/**Raw data header file*/
private String headerFilename = null;
/**Decrypted file*/
private String rawFilenameDecrypted = null;
/**indicates if the message is signed. Before it has been analyzed it is not clear
*if the message/MDN contains a signature or not
*/
private int signType = AS2Message.SIGNATURE_UNKNOWN;
/**indicates if the message is encrypted*/
private int encryptionType = AS2Message.ENCRYPTION_UNKNOWN;
/**Stores the compression type of this entry*/
private int compressionType = AS2Message.COMPRESSION_NONE;
/**This is the product name submitted in the user agent header*/
private String useragent = null;
private int direction = DIRECTION_UNKNOWN;
private String receivedContentMIC;
/**Possible are
* AS2Message.STATE_STATE_FINISHED
*AS2Message.STATE_STATE_PENDING
*AS2Message.STATE_STATE_STOPPED
*/
private int state = AS2Message.STATE_PENDING;
/**stores if the MDN to this message should be sync or async*/
private boolean requestsSyncMDN = true;
private String asyncMDNURL = null;
private String subject;
/**There are several message types that are tansported by the AS2 protocol. These are
* the AS2 message (EDI data) and the Certificate Exchange Message (CEM, contains certificates).
*/
private int messageType = AS2Message.MESSAGETYPE_AS2;
private int resendCounter = 0;
/**These are the disposition notification options
*/
private DispositionNotificationOptions dispositionNotificationOptions = new DispositionNotificationOptions();
public AS2MessageInfo() {
this.useragent = AS2ServerVersion.getUserAgent();
}
/**Initializes the message info from the passed MDN/AS2 message request headers*/
public void initializeByRequestHeader(Properties requestHeader) {
if (requestHeader.containsKey("message-id")) {
this.setMessageId(requestHeader.getProperty("message-id"));
}
//MDN: server is in "server"
//AS2 msg: server is in "user-agent"
if (requestHeader.containsKey("server")) {
this.setUserAgent(requestHeader.getProperty("server"));
} else {
this.setUserAgent(requestHeader.getProperty("user-agent"));
}
if (requestHeader.containsKey("as2-from")) {
this.setSenderId(AS2MessageParser.unescapeFromToHeader(requestHeader.getProperty("as2-from")));
}
if (requestHeader.containsKey("as2-to")) {
this.setReceiverId(AS2MessageParser.unescapeFromToHeader(requestHeader.getProperty("as2-to")));
}
if (requestHeader.containsKey("from")) {
this.setSenderEMail(requestHeader.getProperty("from"));
}
if( requestHeader.containsKey("subject")){
this.setSubject(requestHeader.getProperty("subject"));
}
}
/**Returns the senderId, unescaped*/
@Override
public String getSenderId() {
return senderId;
}
/**sets the sender id, unescaped*/
@Override
public void setSenderId(String senderId) {
this.senderId = senderId;
}
/**sets the receiver id, unescaped*/
@Override
public String getReceiverId() {
return receiverId;
}
/**sets the sender id, unescaped*/
@Override
public void setReceiverId(String receiverId) {
this.receiverId = receiverId;
}
@Override
public Date getInitDate() {
return initDate;
}
@Override
public void setInitDate(Date messageDate) {
this.initDate = messageDate;
}
@Override
public String getMessageId() {
return messageId;
}
/**Removes braces if they exist
*/
@Override
public void setMessageId(String messageId) {
if (messageId != null && messageId.startsWith("<") && messageId.endsWith(">")) {
messageId = messageId.substring(1, messageId.length() - 1);
}
this.messageId = messageId;
}
@Override
public String getRawFilename() {
return rawFilename;
}
@Override
public void setRawFilename(String rawFilename) {
this.rawFilename = rawFilename;
}
public String getSenderEMail() {
return senderEMail;
}
public void setSenderEMail(String senderEMail) {
this.senderEMail = senderEMail;
}
@Override
public int getDirection() {
return direction;
}
@Override
public void setDirection(int direction) {
this.direction = direction;
}
@Override
public int getState() {
return state;
}
@Override
public void setState(int state) {
this.state = state;
}
@Override
public int getSignType() {
return signType;
}
@Override
public void setSignType(int signType) {
this.signType = signType;
}
@Override
public int getEncryptionType() {
return encryptionType;
}
public void setEncryptionType(int encryptionType) {
this.encryptionType = encryptionType;
}
public String getReceivedContentMIC() {
return receivedContentMIC;
}
public void setReceivedContentMIC(String receivedContentMIC) {
this.receivedContentMIC = receivedContentMIC;
}
public boolean requestsSyncMDN() {
return requestsSyncMDN;
}
public void setRequestsSyncMDN(boolean requestsSyncMDN) {
this.requestsSyncMDN = requestsSyncMDN;
}
public String getAsyncMDNURL() {
return asyncMDNURL;
}
public void setAsyncMDNURL(String asyncMDNURL) {
this.asyncMDNURL = asyncMDNURL;
}
@Override
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
@Override
public String getHeaderFilename() {
return headerFilename;
}
@Override
public void setHeaderFilename(String headerFilename) {
this.headerFilename = headerFilename;
}
public String getRawFilenameDecrypted() {
return rawFilenameDecrypted;
}
public void setRawFilenameDecrypted(String rawFilenameDecrypted) {
this.rawFilenameDecrypted = rawFilenameDecrypted;
}
@Override
public String getSenderHost() {
return senderHost;
}
@Override
public void setSenderHost(String senderHost) {
this.senderHost = senderHost;
}
/**Returns the content of this object for debug purpose
*/
@Override
public String getDebugDisplay() {
StringBuilder buffer = new StringBuilder();
buffer.append("asyncMDNURL=\t\t").append(this.asyncMDNURL);
buffer.append("\n");
buffer.append("direction=\t\t").append(this.direction);
buffer.append("\n");
buffer.append("encryptionType=\t\t").append(this.encryptionType);
buffer.append("\n");
StringBuilder append = buffer.append("headerFilename=\t\t").append(this.headerFilename);
buffer.append("\n");
buffer.append("messageDate=\t\t").append(this.initDate);
buffer.append("\n");
buffer.append("messageId=\t\t").append(this.messageId);
buffer.append("\n");
buffer.append("rawFilename=\t\t").append(this.rawFilename);
buffer.append("\n");
buffer.append("rawFilenameDecrypted=\t\t").append(this.rawFilenameDecrypted);
buffer.append("\n");
buffer.append("receivedContentMIC=\t\t").append(this.receivedContentMIC);
buffer.append("\n");
buffer.append("receiverId=\t\t").append(this.receiverId);
buffer.append("\n");
buffer.append("requestsSyncMDN=\t\t").append(this.requestsSyncMDN);
buffer.append("\n");
buffer.append("senderEMail=\t\t").append(this.senderEMail);
buffer.append("\n");
buffer.append("senderHost=\t\t").append(this.senderHost);
buffer.append("\n");
buffer.append("senderId=\t\t").append(this.senderId);
buffer.append("\n");
buffer.append("signType=\t\t").append(this.signType);
buffer.append("\n");
buffer.append("subject=\t\t").append(this.subject);
buffer.append("\n");
buffer.append("state=\t\t").append(this.state);
return (buffer.toString());
}
@Override
public String getUserAgent() {
return useragent;
}
@Override
public void setUserAgent(String useragent) {
this.useragent = useragent;
}
public DispositionNotificationOptions getDispositionNotificationOptions() {
return dispositionNotificationOptions;
}
public void setDispositionNotificationOptions(DispositionNotificationOptions dispositionNotificationOptions) {
this.dispositionNotificationOptions = dispositionNotificationOptions;
}
/**
* @return the compressionType
*/
public int getCompressionType() {
return compressionType;
}
/**
* @param compressionType the compressionType to set
*/
public void setCompressionType(int compressionType) {
this.compressionType = compressionType;
}
/**There are several message types that are tansported by the AS2 protocol. These are
* the AS2 message (EDI data) and the Certificate Exchange Message (CEM, contains certificates).
*/
public int getMessageType() {
return messageType;
}
/**There are several message types that are tansported by the AS2 protocol. These are
* the AS2 message (EDI data) and the Certificate Exchange Message (CEM, contains certificates).
*/
public void setMessageType(int messageType) {
this.messageType = messageType;
}
@Override
public boolean isMDN() {
return (false);
}
/**Overwrite the equal method of object
*@param anObject object ot compare
*/
@Override
public boolean equals(Object anObject) {
if (anObject == this) {
return (true);
}
if (anObject != null && anObject instanceof AS2MessageInfo) {
AS2MessageInfo info = (AS2MessageInfo) anObject;
return (info != null && this.messageId != null && this.messageId.equals( info.messageId));
}
return (false);
}
@Override
public int hashCode() {
int hash = 5;
hash = 71 * hash + (this.messageId != null ? this.messageId.hashCode() : 0);
return hash;
}
/**
* @return the resendCounter
*/
public int getResendCounter() {
return resendCounter;
}
/**
* @param resendCounter the resendCounter to set
*/
public void setResendCounter(int resendCounter) {
this.resendCounter = resendCounter;
}
}