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

jadex.platform.service.message.contentcodecs.JadexXMLContentCodec Maven / Gradle / Ivy

package jadex.platform.service.message.contentcodecs;

import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Map;
import java.util.Properties;

import jadex.bridge.service.types.message.IContentCodec;
import jadex.bridge.service.types.message.IEncodingContext;
import jadex.commons.Tuple2;
import jadex.commons.transformation.binaryserializer.IErrorReporter;
import jadex.xml.TypeInfoPathManager;
import jadex.xml.bean.JavaReader;
import jadex.xml.bean.JavaWriter;
import jadex.xml.reader.IObjectReaderHandler;
import jadex.xml.writer.IObjectWriterHandler;

/**
 *  Content condec using the Jadex-XML framework.
 */
public class JadexXMLContentCodec implements IContentCodec, Serializable
{
	//-------- constants --------
	
	/** The language identifier. */
	public static final String	JADEX_XML	= "jadex-xml";
	
	/** The debug flag. */
	protected boolean DEBUG = false;
	
	/**
	 *  Test if the codec can be used with the provided meta information.
	 *  @param props The meta information.
	 *  @return True, if it can be used.
	 */
	public boolean match(Properties props)
	{
		return JADEX_XML.equals(props.getProperty("language"));	// Hack!!! avoid dependency to fipa
	}

	/**
	 *  Encode data with the codec.
	 *  @param val The value.
	 *  @return The encoded object.
	 */
	public byte[] encode(Object val, ClassLoader classloader, Map, Object[]> info, IEncodingContext context)
	{
		Object[] infos = info==null? null: info.get(getClass());
		IObjectWriterHandler handler = (IObjectWriterHandler)(infos!=null? infos[1]: null);
		byte[] ret = JavaWriter.objectToByteArray(val, classloader, handler);
		if(DEBUG)
		{
			try
			{
				System.out.println("encode content: "+new String(ret, "UTF-8"));
			}
			catch(UnsupportedEncodingException e)
			{
				throw new RuntimeException(e);
			}
		}
		return ret;
	}

	/**
	 *  Decode data with the codec.
	 *  @param val The string value.
	 *  @return The encoded object.
	 */
	public Object decode(byte[] val, ClassLoader classloader, Map, Object[]> info, IErrorReporter rep)
	{
		Object[] infos = info==null? null: info.get(getClass());
		Tuple2  tup = (Tuple2)(infos!=null? infos[0]: null);
		Object ret = JavaReader.objectFromByteArray(val, classloader, tup==null? null: tup.getFirstEntity(), tup==null? null: tup.getSecondEntity(), rep);
		if(DEBUG)
			System.out.println("decode content: "+ret);
		return ret;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy