package org.opentrafficsim.imb; import nl.tno.imb.TByteBuffer; /** * Transmit an array of Object to the IMB hub. *

* Copyright (c) 2013-2020 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
* BSD-style license. See OpenTrafficSim License. *

* @version $Revision$, $LastChangedDate$, by $Author$, initial version Oct 27, 2016
* @author Alexander Verbraeck * @author Peter Knoppers * @author Wouter Schakel */ public class ObjectArrayToIMB { /** * Do not instantiate */ private ObjectArrayToIMB() { // Cannot be instantiated } /** * Convert an array of Object to an IMB payload. * @param data Object[]; the data to transmit * @return TByteBuffer; the constructed IMB payload * @throws IMBException */ public static TByteBuffer objectArrayToIMBPayload(final Object[] data) throws IMBException { TByteBuffer payload = new TByteBuffer(); for (Object o : data) { switch (o.getClass().getName()) { case "java.lang.String": payload.prepare((String) o); break; case "java.lang.Integer": payload.prepare((Integer) o); break; case "java.lang.Long": payload.prepare((Long) o); break; case "java.lang.Double": payload.prepare((Double) o); break; case "java.lang.Float": payload.prepare((Float) o); break; case "java.lang.Byte": payload.prepare((Byte) o); break; case "java.lang.Character": payload.prepare((Character) o); break; case "java.lang.Boolean": payload.prepare((Boolean) o); break; default: if (o instanceof SelfWrapper) { ((SelfWrapper) o).prepare(payload); } else { throw new IMBException("don't know how to prepare " + o.getClass().getName()); } break; } } payload.prepareApply(); for (Object o : data) { switch (o.getClass().getName()) { case "java.lang.String": payload.qWrite((String) o); break; case "java.lang.Integer": payload.qWrite((Integer) o); break; case "java.lang.Long": payload.qWrite((Long) o); break; case "java.lang.Double": payload.qWrite((Double) o); break; case "java.lang.Float": payload.qWrite((Float) o); break; case "java.lang.Byte": payload.qWrite((Byte) o); break; case "java.lang.Character": payload.qWrite((Character) o); break; case "java.lang.Boolean": payload.qWrite((Boolean) o); break; default: if (o instanceof SelfWrapper) { ((SelfWrapper) o).qWrite(payload); } else { // Cannot happen; would have been caught in the prepare pass throw new IMBException("don't know how to qWrite " + o.getClass().getName()); } break; } } return payload; } }