package com.linkedin.camus.coders; import org.apache.hadoop.io.MapWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.io.Writable; /** * Container for messages. Enables the use of a custom message decoder with knowledge * of where these values are stored in the message schema * * @author kgoodhop * * @param <R> The type of decoded payload */ public class CamusWrapper<R> { private R record; private long timestamp; private MapWritable partitionMap; public CamusWrapper(R record) { this(record, System.currentTimeMillis()); } public CamusWrapper(R record, long timestamp) { this(record, timestamp, "unknown_server", "unknown_service"); } public CamusWrapper(R record, long timestamp, String server, String service) { this.record = record; this.timestamp = timestamp; this.partitionMap = new MapWritable(); partitionMap.put(new Text("server"), new Text(server)); partitionMap.put(new Text("service"), new Text(service)); } /** * Returns the payload record for a single message * @return */ public R getRecord() { return record; } /** * Returns current if not set by the decoder * @return */ public long getTimestamp() { return timestamp; } /** * Add a value for partitions */ public void put(Writable key, Writable value) { partitionMap.put(key, value); } /** * Get a value for partitions * @return the value for the given key */ public Writable get(Writable key) { return partitionMap.get(key); } /** * Get all the partition key/partitionMap */ public MapWritable getPartitionMap() { return partitionMap; } }