All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openas2.params.MessageParameters Maven / Gradle / Ivy

Go to download

Open source implementation of the AS2 standard for signed encrypted and compressed document transfer

There is a newer version: 2.10.1
Show newest version
package org.openas2.params;

import java.util.StringTokenizer;

import javax.mail.internet.ParseException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.openas2.message.Message;
import org.openas2.util.Properties;

public class MessageParameters extends ParameterParser {
    public static final String KEY_SENDER = "sender";
    public static final String KEY_RECEIVER = "receiver";
    public static final String KEY_ATTRIBUTES = "attributes";
    public static final String KEY_HEADERS = "headers";
    public static final String KEY_CONTENT_FILENAME = "content-disposition";
    private Message target;

    private Log logger = LogFactory.getLog(MessageParameters.class.getSimpleName());

    public MessageParameters(Message target) {
	super();
	this.target = target;
    }

    public void setParameter(String key, String value) throws InvalidParameterException {
	StringTokenizer keyParts = new StringTokenizer(key, ".", false);

	if (keyParts.countTokens() != 2) {
	    throw new InvalidParameterException("Invalid key format", this, key, null);
	}

	String area = keyParts.nextToken();
	String areaID = keyParts.nextToken();

	if (area.equals(KEY_SENDER)) {
	    getTarget().getPartnership().setSenderID(areaID, value);
	} else if (area.equals(KEY_RECEIVER)) {
	    getTarget().getPartnership().setReceiverID(areaID, value);
	} else if (area.equals(KEY_ATTRIBUTES)) {
	    getTarget().setAttribute(areaID, value);
	} else if (area.equals(KEY_HEADERS)) {
	    getTarget().setHeader(areaID, value);
	} else {
	    throw new InvalidParameterException("Invalid area in key", this, key, null);
	}
    }

    public String getParameter(String key) throws InvalidParameterException {
	StringTokenizer keyParts = new StringTokenizer(key, ".", false);

	if (keyParts.countTokens() != 2) {
	    throw new InvalidParameterException("Invalid key format", this, key, null);
	}

	String area = keyParts.nextToken();
	String areaID = keyParts.nextToken();

	if (area.equals(KEY_SENDER)) {
	    return getTarget().getPartnership().getSenderID(areaID);
	} else if (area.equals(KEY_RECEIVER)) {
	    return getTarget().getPartnership().getReceiverID(areaID);
	} else if (area.equals(KEY_ATTRIBUTES)) {
	    return getTarget().getAttribute(areaID);
	} else if (area.equals(KEY_HEADERS)) {
	    return getTarget().getHeader(areaID);
	} else if (area.equals(KEY_CONTENT_FILENAME) && areaID.equals("filename")) {
	    String s = null;
	    try {
		s = getTarget().extractPayloadFilename();
	    } catch (ParseException e) {
		logger.warn("Failed to extract filename from content-disposition: "
			+ org.openas2.logging.Log.getExceptionMsg(e), e);
	    }
	    if (s == null || s.length() < 1)
		s = getTarget().getPayloadFilename();
	    if (s != null && s.length() > 0)
		return s;
	    // If it gets to here then the sender did not send a filename so...
	    String filename = Properties.getProperty(Properties.AS2_RX_MESSAGE_FILENAME_FALLBACK, null);
	    if (filename == null)
		return getTarget().getMessageID();
	    else {
		CompositeParameters parser = new CompositeParameters(false).add("date", new DateParameters())
			.add("msg", new MessageParameters(getTarget())).add("rand", new RandomParameters());
		return ParameterParser.parse(filename, parser);
	    }
	} else {
	    throw new InvalidParameterException("Invalid area in key", this, key, null);
	}
    }

    public void setTarget(Message message) {
	target = message;
    }

    public Message getTarget() {
	return target;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy