package com.netthreads.osc.common.domain; import java.util.ArrayList; import java.util.List; import com.netthreads.osc.common.collections.Pool; import com.netthreads.osc.common.collections.ResettingPool; /** * An OSC message consists of an OSC Address Pattern followed by an OSC Type Tag * String followed by zero or more OSC Arguments. * */ public class OSCMessage implements OSCPacket { public static final int POOL_INITIAL_CAPACITY = 32; private String address; private List<Character> types; private List<Object> arguments; // Message Pool. private static final Pool<OSCMessage> pool = new ResettingPool<OSCMessage>(POOL_INITIAL_CAPACITY) { @Override protected OSCMessage newObject() { return new OSCMessage(); } }; /** * Get instance of. * */ public static OSCMessage $(String address) { OSCMessage message = pool.obtain(); message.setAddress(address); return message; } private OSCMessage() { types = new ArrayList<Character>(); arguments = new ArrayList<Object>(); } /** * Reset attributes. * */ @Override public void reset() { types.clear(); arguments.clear(); address = ""; } /** * Place back into pool. * */ @Override public void free() { pool.free(this); } public String getAddress() { return address; } public void addArgument(Object argument) { arguments.add(argument); } public void setAddress(String address) { this.address = address; } public List<Object> getArguments() { return arguments; } public List<Character> getTypes() { return types; } /** * For debug only. */ @Override public String toString() { String message = address; int size = arguments.size(); for (int i = 0; i < size; i++) { message += arguments.get(i) + ","; } return message; } /** * For test only. * * @return The associated pool. */ public static Pool<OSCMessage> getPool() { return pool; } }